簡體   English   中英

指針初始化之間的區別

[英]Difference between pointer initializations

當我在閱讀C ++ Primer時,發現了一個我不理解的示例

double dval;
double *pd = &dval; //ok:initializer is the address of a double
double *pd2 = pd; // ok:initializer is a pointer to double

*pd2也是指針,因為*pd也是指針嗎? 有人可以用內存地址(分配給pd2 )解釋在后台發生什么嗎?

pd2的值是分配給它的值,即dval的地址,該地址存儲為pd值並分配給前者。

*pd2也是指針,因為*pd也是指針嗎?

不給pd2分配pd當前持有的值。 因此, pd2最終指向dval 如果要讓pd2指向pd本身而不是pd指向的內容,則僅使用指針指向指針,例如:

double dval;
double *pd = &dval;
double **pd2 = &pd;

有人可以用內存地址(在pd2中分配了什么)解釋后台發生了什么嗎?

指針只是碰巧是內存地址的數字。 如果您將指針視為整數,那么您提供的代碼與幕后的代碼並沒有太大區別:

double dval;
uintptr_t pd = address of dval;
uintptr_t pd2 = pd;

您只是按原樣將一個指針值(一個數字)分配給另一個指針(數字)變量。

指針是一個內存地址。 double *pd2 = pd; 將一個指針分配給另一個指針。 沒有魔術,只有一個簡單的分配操作。 兩個指針都指向相同的內存地址。

pd2中的值與pd值相同。 如果要取消引用pdpd2 ,則將獲得存儲在dval的值。

分配&pd將需要一個指向指針的指針,因為您要獲取指針的地址。

首先,您聲明一個double dval ,然后聲明一個指針,該指針指向該double(由於double由&dval )。 然后將第二個指針設置為等於第一個指針。 所以最后,您有了:

pd = pd2 = &dval

這是兩個指向相同地址的指針, 而不是指向另一個指針的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM