본문 바로가기

Let's Study/Pointer

1. *의 두가지 의미

포인터를 시작하기 전에 *의 의미를 알아두면 포인터를 더 쉽게 이해할 수 있습니다.

 

예를 들어

 

 

 

여기서 몇번 항목이 에러가 날까요?

 

 

 

 

 

 

1번

 

int* pa = &a포인터변수 pa는 초기값으로 a의 주소를 받았습니다.

 

*pa = 10;

그리고 pa가 가르키는 곳(a)에 10을 넣어서

 

printf로  a를 출력합니다.

 

그렇다면 출력되는 값은 5가 아닌 10이 출력됩니다.

 

 

2번

 

int* pb;

포인터변수 pb에는 초기값을 지정해주지 않아서

포인터변수 pb가 가르키고 있는건 쓰레기값입니다.

 

pb = &b;

포인터변수 pb에 b의 주소를 넣었습니다.

*pb = 1000;

pb가 가르키고 있는 곳(b)에 1000을 넣어서

printf로 b와 포인트변수 pb가 가르키고 있는 곳을 출력했습니다.

 

출력되는 값은 b와 *pb 모두 1000입니다.

 

 

3번

 

int* pc;

포인터변수 pc의 초기값을 지정해주지 않아, 쓰레기값을 가르키고 있습니다.

*pc = 1500;

포인터변수 pc가 가르키고 있는 곳(쓰레기값)에 1500을 넣어서

Segmentation Fault 에러(포인터변수 잘못 사용하면 이게 뜹니다.)가 나타납니다.

 

만약 pc의 쓰레기값이 시스템이나 다른 메모리가 아닌 곳을 가리켰다면

에러가 뜨지 않겠지만 보통은 그렇지 않습니다.

 

 

위에서 알 수 있는건

 

1. 포인터변수를 선언할 때의 *는 주소를 저장할 수 있는 변수를 할당 받는 것이고.

2. 수식에서 사용되는 *는 변수에 대한 역참조, 즉 포인터변수가 가리키고 있는 주소의 을 리턴한다는 의미입니다.

 

당연한 말이지만 포인터변수에는 번지값이 들어있습니다.

 

'Let's Study > Pointer' 카테고리의 다른 글

5. *p와 p[]의 차이.  (2) 2013.05.07
4. sha == sha[0] == &sha[0][0]  (0) 2013.03.23
3. 배열포인터, 이젠 아무대나 *쓰지말자!  (0) 2013.03.22
2. 포인터가 4바이트인 이유  (1) 2013.03.21