컴퓨터 이론/C언어 & 자료구조 & 알고리즘
02. 포인터
컴퓨터공부용
2023. 2. 13. 22:50
Q. 포인터 이해를 위한 문제
여러분은 택배기사입니다. 여러분이 배송해야 할 택배를 받는 사람은 A학생입니다.
여러분은 A학생이 어디있는지 모르는데 A학생에게 택배를 배송하기 위해서는 어떻게 해야 할까요?
A학생에게 택배를 배송하기 위해서는 A학생의 집 주소로 택배를 배송하면 된다.
이것을 C언어에 적용하면, A학생은 변수 이름, 택배는 데이터, 그럼 주소는?
주소에 해당하는 것은 메모리 주소이다. 우리는 이 메모리 주소를 저장하기 위해 포인터 변수를 사용한다.
조금 헷갈릴 수 있겠지만, int는 정수형, char는 문자형처럼 포인터를 하나의 타입이라 생각하면 된다.
포인터는 조금 특별하게 전용 연산자가 존재한다. * 연산자와 & 연산자이다.
예제로 알아보자.
#include <stdio.h>
int main()
{
int a = 5;
printf("변수 a의 값 : %d\n", a);
printf("변수 a의 주소 : %d\n", &a);
return 0;
}
실행 결과 변수 a의 값 : 5 변수 a의 주소 : 1436276836 |
즉, & 연산자는 변수의 메모리 주소를 나타낼 때 사용하는 연산자이다.
#include <stdio.h>
int main()
{
int a = 5;
int *b = &a;
printf("변수 a의 값 : %d\n", a);
printf("변수 a의 주소 : %u\n", &a);
printf("변수 b의 값 : %u\n", b);
printf("변수 b가 가리키는 곳의 값 : %d\n", *b);
return 0;
}
실행 결과 변수 a의 값 : 5 변수 a의 주소 : 1436276836 변수 b의 값 : 1436276836 변수 b가 가리키는 곳의 값 : 5 |
변수 선언 시에 * 연산자를 사용하면, 해당 변수는 주소를 저장하는 포인터 변수가 된다.
변수 사용 시에 * 를 사용하게 되면 포인터 변수가 가진 주소에 저장된 값을 사용하게 된다.
즉, 변수 b가 가진 값인 a의 주소, a의 주소에 저장된 값인 5를 불러오게 된다.
다음에는 포인터를 활용하는 방법과 포인터를 사용할 때 주의할 점을 알아볼 것이다.