[英]little confusion regarding C++ pointers and this powerpoint slide
在上面的幻燈片中,為什么會這樣:
int* p = &x;
cout << *p << endl;
輸出25? 從對指針的一點了解來看,&x是x的地址,它分配給* p,即p的值。 在那種情況下,由於&x是0003,那么* p和它的輸出也應該是0003嗎?
對於所有無法忍受像我這樣簡單的高級編碼人員,我對“提前”表示歉意。
&x是x的地址,分配給* p
不,沒有分配給*p
。 在該行中, p
被定義為int*
類型,並且p
被分配了x
的地址。
現在p
擁有地址0003, *p
擁有25。
*
僅與該行中的變量定義有關。 在初始化期間,將值分配給定義的變量。 如果不是這種情況, p
應該首先指向哪里? 那么應該將0003寫入哪個位置?
幻燈片令人困惑,因為它表明指針變量的名稱為*p
。 變量的名稱僅為p
。
當打印表達式p
,將獲得0003
,因為那是指針的值。
因此,指針指向地址0003
處的對象,表達式*p
從此處獲取值25。
幻燈片最好說單元格0001的名稱為p
。 該單元格0003有兩個名稱(或到達該路徑的路徑),分別是直接x
或間接*p
。
當我們聲明指針時,我們將*
與數據類型一起使用,例如int *p
這並不意味着我們要同時聲明和引用value。
所以當您輸入int *p = &x;
它類似於寫作
int *p;
p = &x;
現在p是0003 ,地址0003的值是25 。 您可以通過* p獲得。
引用運算符(&)引用變量x的地址,該變量分配給p 。由於p持有一個內存位置的地址,因此它是指針類型(int *) 。現在(* p),其中(* )是引用運算符(*)表示p中的地址所保存的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.