#include <stdio.h>
#include <stdlib.h>
int main (void) {
int a = 5, *ptr;
ptr = &a;
printf("0x%X\n", ptr);
printf("%p\n", &ptr); //Why are these the same?
printf("%d\n", *ptr);
ptr++;
printf("0x%X\n", ptr);
printf("%p\n", &ptr); //Why are these the same?
printf("%d\n", *ptr);
return 0;
}
为什么这两个值相同?既然我增加了指针也不应该改变地址?
答案 0 :(得分:4)
您增加了ptr
的值。它仍然存在于内存中的相同位置。 &ptr
告诉你它的地址。这与做a++
之类的事情没什么不同。如果您打印出a
的值,则现在为6,但如果您使用a
打印出printf("%p\n", (void*)&a);
的地址,则前后的地址将相同增量。
答案 1 :(得分:3)
5是a
的值,&a
是a
的地址。
ptr = &a
表示a
的地址等于ptr
的值。
&ptr
是ptr
。
您可以将ptr
视为可以保存地址的框。
当您递增ptr
时,您更改了框内的地址,即ptr
;不是盒子本身的地址。