1

我有以下一组代码

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

为什么会有这样的差异......?我认为两者都会给我相同的价值。

4

3 回答 3

1

最初p1存储x(您使用 获得的&x)的地址。稍后您设置p1存储一个空地址。

在第一个片段中,您决定打印的不是存储在其中的地址p1,而是其自身的地址 。是一个和其他变量一样的变量,就像其他变量一样,将为您提供该变量的地址。这与存储在其中的值不同,后者可以通过第二个代码段打印出来。p1 p1&p1p1

我喜欢图片

像任何其他变量一样,您不能更改变量的地址p1,您只能更改它存储的值,并且在指针的情况下,恰好该值是地址。

于 2011-12-27T12:29:13.110 回答
1

两者不同,因此输出不同。

p1返回指针指向的变量的地址。

&p1返回指针p1本身存储在内存中的地址。

于 2011-12-27T11:35:53.923 回答
0
p1=0;

将指向“p1”的指针设置为零,而不是它的内容,应该由

*p1=0;
于 2011-12-27T11:34:23.907 回答