2014-11-04 95 views
2

我對鏈接列表中的節點具有以下結構。地址之間的C++差異

struct node { 
    int info; 
    nod *next; 
}; 

我已經聲明p指向結構(節點)並初始化它。

node *p = new node; 

我不明白p&p之間的區別,他們是2個地址,但不應該他們有相同的地址?

cout<<p<<" "<<&p; 
+5

p - >節點地址,&p - >指向節點的指針地址。 – Borgleader 2014-11-04 13:09:01

+1

如果你走到一棟房子,它指示你去另一棟房子,你認爲這兩座房子是同一棟房子嗎? – chris 2014-11-04 13:10:02

+1

&p表示包含其他地址的變量的地址。 – piotrekg2 2014-11-04 13:12:00

回答

-2

在C語言中,如果你想給一個變量給他寫信或更好++你poiner使用前&說:讓他們在事業ADRESS指針&點給出了var的ADRESS。

int i = 0; 
int* pointer = &i; 

如果你想使用變量的常量,指針指向你用*來表示。

int y = *i; 

basicly p是該節點的指針和& p是該節點的指針的ADRESS。

p具有其自身的ADRESS,在exampel如果你想有一個其他指針第2-11頁的指向你做富secondpointer的節點上= & p指向

4

讓我們來看看這個有點不同:

struct node { 
    int info; 
    node *next; 
}; 

node n; // the node itself 

node* p = &n; // p is a "node pointer" (node*) 
       // its value holds the address of (node) n 

node** pp = &p; // pp is a pointer to a "node pointer" (node**) 
       // its value holds the address of (node*) p 

這是否使它更清晰一點?

1

所以,讓我們有一個簡單的例子來闡述這一點: -

int x = 4; 

通過這個4將存儲在創建INT大小的內存。這塊內存在程序中被命名爲變量x。假設內存地址是ADDRESS_1。

int *ptr = &x; 

通過這一聲明的內存另一塊被創建以指針的大小(同爲任何指針類型是否浮點數,字符串或某些用戶定義的類型)。讓我們說,內存地址是ADDRESS_2。這塊內存將保存x的地址,例如ADDRESS_1。這就是指針的含義。

當你這樣做

&ptr; 

這意味着你是指PTR的地址,該地址是在這種情況下ADDRESS_2。

它會給你ptr存儲在內存中的地址。

希望事情會都清楚你只要指針的定義去...

2

我覺得Borgleader和Chris有解釋,以最簡單的方式,最好的想法。

首先你必須記住一個指針也是一個變量。所以,雖然int變量包含一個整數,但指針保存一個地址。和其他變量一樣,它有自己的地址。

因此,當你這樣做:

cout << p ... 

你在另一方面印刷的p(您剛剛創建的新節點的地址)的值

cout << &p ... 

將打印地址爲p。有兩個完全不同的地址。

1

考慮了一塊假想內存的這個宏偉的藝術家再現執行node *p = new node;後:

4  5  6  7  8  ....  
...___________________________________ ... 
... |  |  |  |  |  | ... 
... |  | 8 |  | info next | ... 
... |  |  |  |  |  | ... 
...----------------------------------- ... 
       ^
       | 
       "p" 

有一個node開始在小區8號和單元號6(我們稱之爲「P」)包含數8.

換句話說,
p的值是8,這是node對象的地址,而
的值- 名爲「p」的變量地址 - 爲6.