반응형

저번 시간에 포인터에 대한 개념을 설명했습니다. 

 

이번 시간에는 메모리 주소를 저장하는 변수인 포인터 변수에 대해서 알아 보겠습니다. 

 

포인터 변수는 int* num 이런 식으로 나타냅니다. 이는 저장한 주소에 해당하는 메모리를 나타내게 됩니다.

 

그림1

만약 포인터 변수를 사용하지 않고, 그냥 int형을 사용하게 되면 빨간줄로 에러가 표시되게 됩니다.

 

그래서 포인터 변수가 필요한 것입니다.

 

그림2

 

그림 2를 보시면 &num1과 num2의 값이 같습니다. 즉  num2에 num1의 주소가 저장되어 있는 것입니다.

 

그렇다면 num1의 값을 바꾸게 된다면 주소가 바뀔까요? 아닙니다.

그림 3

 

그림 3를 보아 알 수 있듯이 다른 값을 할당한다고 해서 주소가 바뀌지 않습니다. 메모리 주소를 num2가 나타내고 있고, 그 메모리가 저장한 값만 바뀌게 되는 것입니다.

 

이러한 포인터 변수를 활용해서 역참조도 할 수 있습니다.

 

만약 int num1=303이라고 하고, int *num2=&num1로 둔다면, *num2를 해줌으로써 303값을 불러올 수 잇습니다.

 

그림 4

 

즉 요약하자면 처음에 포인터 변수를 선언할 때 *를 사용하고, 역참조를 할 때 *를 사용하여 값을 불러올 수 있습니다.

 

또한 포인터 변수는 하나의 변수이므로 크기를 갖습니다. 그리고 그 크기는 언제나 같습니다. 

 

실수형에서는 float가 4바이트, double이 8바이트인 것처럼 크기가 다 달랐지만 포인터 변수는 32비트 컴퓨터에서는 4바이트, 64비트에서는 8바이트로 통일되어 있습니다.

 

그리고 int형인 변수의 주소값을 저장하고 싶으면 int*를 써야지 double*같은 다른 자료형의 포인터 변수를 쓰게 되면 에러가 뜨니 주의하세요

 

이중포인터

이중 포인터는 포인터의 포인터로 포인터 변수의 주소를 저장하는 변수입니다.

 

예를 들어 num=45값이 있고, num의 주소를 저장하는 포인터 변수 A가 있다고 하면, 이 A의 주소를 저장하는 이중 포인터 B가 있는 개념입니다.

 

그리고 *B 즉 B를 역참조 하게 되면 A의 주소가 나오게 됩니다.

반응형

+ Recent posts