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

3월 21일 포인터 한 번더!!!!

송시혁 2013. 3. 21. 16:05

#include <stdio.h>
int main()
{
  int x;
  int *xp;
  
  x = 5;
  xp = &x;
  printf("%08x\n"&x);
  printf("%08x\n", *xp);
  printf("%08x\n"&xp);
  
  x = *xp + 24;
  
  printf("%d\n", x);
  printf("%08x\n"&x);
  printf("%08x\n", *xp);
  printf("%08x\n"&xp);
  printf("%08x\n", *(xp+1));
  return 0;
}


  printf("%08x\n", *(xp+1));

이 프린트문에서  *(xp+1)는 쓰레기값이다!!!

그냥 xp는 x의 주소를 가져오고 그 주소값에서 1을 더하면

주소값의 1을 더한 주소에 값을 가져오게 된다. 그래서

그 주소 따로 값이 없기때문이다. 미정값으로 출력된다.

그러니깐 x의 주소 0012ff74+1을 한 주소가 있는데 거기

에서 *가 값을 가져온것이다. 0012ff74+1의 값은 미정값이다. 

(x +1)로 하거나 아니면

*(xp)+1로 수정하면 30의 16진수인 1E가 나온다.