[c++] “取消引用”指針是什麼意思?


Answers

解引用指針意味著獲取存儲在指針指向的內存位置中的值。 運算符*用於執行此操作,稱為解引用運算符。

int a = 10;
int* ptr = &a;

printf("%d", *ptr); // With *ptr I'm dereferencing the pointer. 
                    // Which means, I am asking the value pointed at by the pointer.
                    // ptr is pointing to the location in memory of the variable a.
                    // In a's location, we have 10. So, dereferencing gives this value.

// Since we have indirect control over a's location, we can modify its content using the pointer. This is an indirect way to access a.

 *ptr = 20;         // Now a's content is no longer 10, and has been modified to 20.
Question

請說明一個例子。




我認為所有以前的答案都是錯誤的,因為他們聲稱解引用意味著訪問實際值。 維基百科提供了正確的定義: https://en.wikipedia.org/wiki/Dereference_operatorhttps://en.wikipedia.org/wiki/Dereference_operator

它在一個指針變量上進行操作,並返回一個等於指針地址值的l值。 這被稱為“取消引用”指針。

也就是說,我們可以在不訪問指向它的值的情況下解引用指針。 例如:

char *p = NULL;
*p;

我們在不訪問其值的情況下解引用NULL指針。 或者我們可以這樣做:

p1 = &(*p);
sz = sizeof(*p);

同樣,解引用,但從不訪問該值。 這樣的代碼不會崩潰:當您實際通過無效指針訪問數據時發生崩潰。 然而,不幸的是,根據該標準,取消引用無效指針是未定義的行為(有一些例外),即使您不嘗試觸摸實際數據。

簡而言之:解引用指針意味著對其應用解引用運算符。 該運算符只是為您將來的使用返回一個l值。




簡而言之,解引用意味著訪問指針指向的特定內存位置的值。






Related