C언어에서 포인터에대해서 질문좀 드릴께요

gogoye의 이미지

#include
int main(void) {
int num = 10;
int *ptr1 =& num;

printf("%p \n", ptr1);
printf("%X \n", ptr1);
return 0;
}

여기서 왜 출력값이 똑같이 나오는거죠?

ptr1이 num를 가리키고있다면, 값이 num의 주소값이 저장되어있어야하는거 아닌가요?

왜 prt1의 주소값이 저장되어있는거죠 ㅜㅜ

C언어 초보좀 도와주십쇼 ㅜㅜ

라스코니의 이미지

ptr1의 주소값은 &ptr1 입니다.

Prentice의 이미지

제가 했을 땐 똑같이 안 나오던데요?

익명 사용자의 이미지

printf( "%p \n", ptr1 );
printf( "%p \n", &ptr1 );

라스코니님 말씀대로 이렇게 찍어야 하겠지요.

올리신 예제처럼 찍으면 둘 다 ptr1에 들어있는 값을 찍는 거니 똑같이 나오는 거고요. :)

mydream의 이미지

ptr1은 포인터니까 num의 주소가 저장돼 있겠죠. 그리고 %p는 그 주소를 출력하는 것이고 %x는 ptr이 담고 있는 값인 그 주소를 16진수 형식으로 출력하는 것이니 같은 값이 출력되는 것으로 보입니다.

Prentice의 이미지

$ cat kldp.c
#include <stdio.h>
int main(void) {
int num = 10;
int *ptr1 =& num;
 
printf("%p \n", ptr1);
printf("%X \n", ptr1);
return 0;
}
$ cc kldp.c && ./a.out
kldp.c:7:17: warning: format specifies type 'unsigned int' but the argument has
      type 'int *' [-Wformat]
printf("%X \n", ptr1);
        ~~      ^~~~
1 warning generated.
0x7fff52815798
52815798