C언어 수업정리/3월 수업정리

3월 20일 수업정리 포인터, symbol table

송시혁 2013. 3. 20. 10:09
#include <stdio.h>
int main()
{
  int x;
  int *xp;
  xp = &x;// 반드시 초기화를 해야한다.
  
  x = 7;
  *xp = 8;
  printf("address of x: %08x\n"&x);
  printf("address of xp: %08x\n"&xp);  
  printf("value of x: %d\n", x);
  printf("value of xp: %08x\n", xp);
  printf("value of *xp: %d\n", *xp);

  return 0;
}

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이 뜨면 수정하여 없애버리도록 한다.