我有以下一组代码
int main(){
int x = 36;
int const * p1;
p1 = &x;
printf("Values at p1: %d\n", *p1);
p1=0;
printf("Addresses pointed to by p1: %p ", &p1);
return 0;
}
给出
Addresses pointed to by p1 gives 0028FF480
int main(){
int x = 36;
int const * p1;
p1 = &x;
printf("Values at p1: %d\n", *p1);
p1=0;
printf("Addresses pointed to by p1: %p ", p1);
return 0;
}
p1指向的地址给出00000000
为什么会出现这样的差异??我认为两者都会给我相同的价值。
答案 0 :(得分:1)
两者因输出的不同而不同。
p1
返回指针指向的变量的地址。
&p1
返回指针p1
本身存储在内存中的地址。
答案 1 :(得分:1)
最初p1
存储x
的地址(您使用&x
获得的地址)。稍后您将p1
设置为存储空地址。
在第一个代码段中,您决定不打印p1
中存储的地址,而是地址 p1
本身< / em>的。 p1
是一个与其他变量一样的变量,就像其他变量一样,&p1
将为您提供该变量的地址。这与存储在其中的值不同,可以使用p1
访问该值,这是第二个代码段打印的内容。
与任何其他变量一样,您无法更改变量p1
的地址,您只能更改它存储的值,而在指针的情况下,它恰好会发生值,即地址。
答案 2 :(得分:0)
p1=0;
会将指向“p1”的指针设置为零,而不是应该由
执行的内容*p1=0;