3월 20일 수업정리 포인터, symbol table
#include <stdio.h> |
xp = &x에서 xp가 x의 주소값0012ff74를 가져온다.
첫번째 printf문은 주소값0012ff74가 나온다.
두번째 printf문에서 &xp는 xp의 주소값 0012ff70이 나온다.
세번째 printf문에서는 x가 8이 출력된다. *xp =8;에서 x의 주소값을 따라가서 8이된다. x의 주소값인 0012ff74에서의 값은 원래 7이지만, xp =&x;으로 x의 주소값을 따라가라고 지정을 하였기때문에 0012ff74인 주소값을 갖는 x를 따라가서 x에 8의 값을 지정한다.
네번째 printf문은 마찬가지로 xp = &x;이므로 x의 주소값
다섯번째 printf문도 3번째와 마찬가지로 xp =&x;으로 x의 주소값을 따라가라고 지정을 하였기때문에 0012ff74인 주소값을 갖는 x를 따라가서 x에 8의 값을 지정한다.
symbol table
자료형 |
이름 |
주소 |
값 |
int |
x |
0012ff74 |
7 |
int* |
xp |
0012ff70 |
0012ff74 |
*xp = 8;
xp의 값 012ff74.
x의 주소값 = 012ff74.
xp가 포인터 '*'의해서 x의 주소값을 따라가서 값을 8로 지정한다. 이것이 포인터
저위의 *xp = 8;이부분을 xp = 8;이라고 쓰면은 warning이 뜬다.
xp와 8이 서러 타입이 달라서 뜨는것이다. 그러나 실행파일은 만들어진다. 바르게 수정하면 다음과 같이 된다.
xp = (int*)8;이 된다. 위의 소스에서 int *xp;라고 선언했지만, 포인터 변수선언과 단순히 그냥 int 선언은 다르다.
프로그램 구성시 warning이 뜨면 수정하여 없애버리도록 한다.