我對鏈接列表中的節點具有以下結構。地址之間的C++差異
struct node {
int info;
nod *next;
};
我已經聲明p指向結構(節點)並初始化它。
node *p = new node;
我不明白p
和&p
之間的區別,他們是2個地址,但不應該他們有相同的地址?
cout<<p<<" "<<&p;
我對鏈接列表中的節點具有以下結構。地址之間的C++差異
struct node {
int info;
nod *next;
};
我已經聲明p指向結構(節點)並初始化它。
node *p = new node;
我不明白p
和&p
之間的區別,他們是2個地址,但不應該他們有相同的地址?
cout<<p<<" "<<&p;
在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指向
讓我們來看看這個有點不同:
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
這是否使它更清晰一點?
所以,讓我們有一個簡單的例子來闡述這一點: -
int x = 4;
通過這個4將存儲在創建INT大小的內存。這塊內存在程序中被命名爲變量x。假設內存地址是ADDRESS_1。
int *ptr = &x;
通過這一聲明的內存另一塊被創建以指針的大小(同爲任何指針類型是否浮點數,字符串或某些用戶定義的類型)。讓我們說,內存地址是ADDRESS_2。這塊內存將保存x的地址,例如ADDRESS_1。這就是指針的含義。
當你這樣做
&ptr;
這意味着你是指PTR的地址,該地址是在這種情況下ADDRESS_2。
它會給你ptr存儲在內存中的地址。
希望事情會都清楚你只要指針的定義去...
我覺得Borgleader和Chris有解釋,以最簡單的方式,最好的想法。
首先你必須記住一個指針也是一個變量。所以,雖然int
變量包含一個整數,但指針保存一個地址。和其他變量一樣,它有自己的地址。
因此,當你這樣做:
cout << p ...
你在另一方面印刷的p
(您剛剛創建的新節點的地址)的值
cout << &p ...
將打印地址爲p
。有兩個完全不同的地址。
考慮了一塊假想內存的這個宏偉的藝術家再現執行node *p = new node;
後:
4 5 6 7 8 ....
...___________________________________ ...
... | | | | | | ...
... | | 8 | | info next | ...
... | | | | | | ...
...----------------------------------- ...
^
|
"p"
有一個node
開始在小區8號和單元號6(我們稱之爲「P」)包含數8.
換句話說,
的p
的值是8,這是node
對象的地址,而
的值- 名爲「p」的變量地址 - 爲6.
p - >節點地址,&p - >指向節點的指針地址。 – Borgleader 2014-11-04 13:09:01
如果你走到一棟房子,它指示你去另一棟房子,你認爲這兩座房子是同一棟房子嗎? – chris 2014-11-04 13:10:02
&p表示包含其他地址的變量的地址。 – piotrekg2 2014-11-04 13:12:00