2011-12-27 53 views
1

我有一个下面的一组代码开发的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

为什么这样的差异..我认为两人都会给我同样的价值。

+1

Whay你认为p1和&p1应该一样吗? – 2011-12-27 11:33:46

+0

ohh狗屎我得到你..谢谢。 – user882196 2011-12-27 11:37:03

+4

dev-C++附带一个ancienct编译器。用cdt尝试codeblocks或qtcreator或eclipse,但不要使用dev-C++。 – kechapito 2011-12-27 11:38:22

回答

0
p1=0; 

将设置指向在输出为“P1”到零,而不是应当由

*p1=0; 
+0

这是一个恒久不变的ü不能这样做:) – user882196 2011-12-27 11:35:51

+0

在你的例子中它不可能,但我说它来解释差异。它发生的所有事情,在第一个例子中,您将指针设置为零并显示它,在第二个示例中您将创建一个新指针并显示其地址。 – Listing 2011-12-27 11:38:02

1

来完成它的内容两者是不同的,因此该差的指针。

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

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

+0

而指针P1很可能存储在与指向的位置完全不同的地方。 – Raveline 2011-12-27 12:19:20

1

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

在第一个片段,你决定不打印存储在的p1地址,但p1本身地址。 p1是一个像其他任何变量一样的变量,与其余的变量一样,&p1将给出该变量的地址。这与存储在其中的值不同,可通过p1访问,并且是第二个片段的打印内容。

I like pictures

像任何其他变量,你不能改变的变量p1的地址,你只能改变它存储的价值,并在指针的情况下,它只是恰巧,值是一个地址。

相关问题