任何人都可以解釋我爲什麼& p的地址後,我分配的內存。
您無法獲取尚未分配內存的對象的地址。指針在塊作用域的開始處分配。因此,在分配之前,您從未觀察到指針的地址 - 僅在之後。
在分配動態內存之前,您確實獲取了指針的地址。分配動態內存後,您可以指定指針的值以獲取動態內存的地址。賦值變量對變量的存儲位置沒有影響。預計將保持在同一地址。
爲什麼p還沒有相同的地址爲:& P'
您從未觀察到&p
的地址。實際上,&p
是一個臨時的,所以它沒有地址。
<< &p
給出的值爲&p
,即地址p
。 << p
爲您提供了值p
,即第一次是不確定的值,第二次是動態分配的整數的地址。
也許你打算問「爲什麼p
不具有相同的值作爲&p
」。這是因爲p
不是指向自身,而是指向另一個對象。
此外,讀取不確定的值具有未定義的行爲。您的程序讀取p
,並在爲其分配值之前將其解除引用。因此你的程序的行爲是不確定的。
參考地址
你的程序不使用的引用。
什麼是參考呢?
引用是一種類似於指針的類型。它更簡單,更受限制:它不能爲空,它不能被重新分配,並且它的地址不能被佔用。無論何時使用引用變量,它都是隱含的間接引用,與必須明確解除引用的指針不同。例如:
int i; // non reference, non pointer
int* p = &i; // a pointer
int& r = i; // a reference
p = nullptr; // a pointer can be null (doesn't point to anything)
// and it can be reassigned
//r = nullptr; // a reference can not. This is ill-formed
r = 42; // a reference is implicitly indirected
*p = 42; // a pointer must be dereferenced explicitly
// to acces the pointed object
int** pp = &p; // you can take the address of a pointer
//int*& pr = &r; // you cannot take the address of a reference
p = &r; // if you apply address-of operator on a reference,
// it is indirected implicitly
'p'是指針指向的地址,'&p'是存儲指針的內存中的實際地址 – UnholySheep
'&p'不是引用,它是指向'p'的指針。 – melpomene
'&p'是一個'int **',不是一個引用,而'p'是一個'int *'。 「指針的地址與指針相同」magic [只發生在數組中](http://stackoverflow.com/questions/8412694/address-of-array)。 – dhke