본문 바로가기

C언어/강의

2010년 10월 20일 수요일 (포인터:함수의 주소값, 포인터변수가 가리키는 자료형 의미)


#include <stdio.h>
// 함수의 이름도 주소값을 갖고 있다.
int main()
{
  int a=3;

  printf("printf adress : %08x\n", printf);  //printf함수주소값
  printf("main adress : %08x\n", main);    //main함수주소값
  printf("a adress : %08x\n"&a);      //변수a의 주소값

  return 0;
}


#include <stdio.h>

int main()
{
  int inum, *ip;
  short *sp;
  
  inum=0x0F5A0B43;
  ip=&inum;      // inum의 주소값을 넣음.(inum을 가리킨다. 0012FF7C)
  
  printf("inum: %x *ip : %p \n", inum, ip);
  sp=(short*)ip; //(casting) ip가 갖고있는 주소값을 넣음.(inum을 가리킨다. 0012FF7C)
  printf("sp : %p, *sp : %x\n"
sp*sp);
  // sp가 갖고있는 주소값출력, sp가 가리키고 있는 주소의 변수값을 출력
  sp++;          // sp가 inum의 세번째 바이트를 가리킨다.(0012FF7E)
  printf("sp :%p, *sp : %x\n", sp, *sp); 
  
  return 0;
}

 


little

endian

 

0012FF78

7CFF1200

ip

0012FF7C

430B5A0F

inum

0012FF80

7CFF1200

sp

 

메모리

(4byte)

 

Simbol Table

type

name

address

int

inum

0012FF7C

int*

ip

0012FF78

short*

sp

0012FF80

 *(에스테리스크)는 포인터형에서 사용될 경우는 가리키고있는 주소의 변수값을 가져오게된다.(inum값)
   붙이지 않을 경우는 가리키고있는 주소값을 가져오게 된다. (0012FF7C)