2011-12-27 28 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的地址,你只能改變它存儲的價值,並在指針的情況下,它只是恰巧,值是一個地址。

相關問題