프로그래밍/C 기초

[C언어 강좌] #33 포인터

도끼_Dokki 2017. 1. 8. 09:00

드디어 이제 포인터를 배울 시간입니다.


전에 변수에도 주소가 있다고 했었던적이 있었습니다.

그리고 배열과 그 주소도 연관되어있다고 했었죠.

변수가 어디에 위치하고있는지 나타내기 위해서 메모리상에서 각각 모두 주소를 가지고있습니다.

우리가 현실에서 살고있는 집도 모두 어디있는지 나타내기 위해서 주소를 가지고있죠.

만약 택배를 보낼때 주소를 알고있어야 그 위치로 가서 택배를 건네줄수 있을것입니다.

마찬가지로 변수를 저장할때도 주소를 알고있어야 그 주소로 가서 값을 저장할수 있을겁니다.


포인터 변수는 바로 그 주소를 저장해둘수 있습니다.


이번 편에서는 간단하게 포인터를 소개하는정도만 하겠습니다.



포인터변수는 위와같이 선언할수 있습니다.

int형의 변수를 담을수 있는 포인터 변수를 선언한것입니다.

물론 int형뿐만 아니라 다른 자료형들로도 선언할수 있습니다.


참고로 *의 위치는 어디에 붙어도 상관없습니다.

int* pnum

int *pnum

int * pnum

int*pnum

이 4개는 모두 똑같은 의미를 갖고있습니다. 자료형과 변수의 이름 사이에 넣어주기만 하면 됩니다.

곱셈이나 덧셈을 할때도 5 + 4와 5+4가 차이 없는것과 같습니다.


근데 선언을 했으면 값을 넣어줘야겠죠? 다른 변수의 주소값을 가져오는 방법은 scanf를 배웠을때 설명해드린적이 있습니다.

&연산자를 사용하면 오른쪽에 있는 피연산자의 주소값을 가져올수 있습니다.



위 예제는 &연산자를 통해서 num의 주소값을 포인터변수 pnum에 저장했습니다.

pnum을 16진수 정수로 출력해보니 28feb8이라고 나왔습니다. 주소는 보통 16진수로 많이 표기하기때문에 16진수로 출력했습니다.

num변수는 메모리상에서28feb8번째 위치에 존재하고있는겁니다.



int형뿐만 아니라 double형도 똑같이 사용 가능합니다. 물론 다른 자료형들도 모두 가능합니다.