Dev C ++在指针地址的情况下给出不同的结果

时间:2011-12-27 11:31:33

标签: c++ dev-c++

我有以下一组代码

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

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

3 个答案:

答案 0 :(得分:1)

两者因输出的不同而不同。

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

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

答案 1 :(得分:1)

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

在第一个代码段中,您决定不打印p1存储的地址,而是地址 p1 本身< / em>的。 p1是一个与其他变量一样的变量,就像其他变量一样,&p1将为您提供该变量的地址。这与存储在其中的值不同,可以使用p1访问该值,这是第二个代码段打印的内容。

I like pictures

与任何其他变量一样,您无法更改变量p1的地址,您只能更改它存储的值,而在指针的情况下,它恰好会发生值,即地址。

答案 2 :(得分:0)

p1=0;

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

执行的内容
*p1=0;