“取消引用”指針是什麼意思? [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

請附上一個例子說明。




指針基礎的代碼和解釋:

取消引用操作從指針開始並跟隨其箭頭以訪問其指針。 目標可能是看待被指控的國家,或者改變被指控的國家。 指針的取消引用操作只有在指針有一個指針的情況下才有效 - 必須分配指針,並且指針必須設置為指向它。 指針代碼中最常見的錯誤是忘記設置指針。 由於代碼中的錯誤導致的最常見的運行時崩潰是一個失敗的引用操作。 在Java中,錯誤的引用將被運行時系統禮貌地標記。 在C,C ++和Pascal等編譯語言中,不正確的引用有時會崩潰,其他時候會以一些微妙的隨機方式破壞內存。 由於這個原因,編譯語言中的指針錯誤可能很難跟踪。

void main() {   
    int*    x;  // Allocate the pointer x
    x = malloc(sizeof(int));    // Allocate an int pointee,
                            // and set x to point to it
    *x = 42;    // Dereference x to store 42 in its pointee   
}



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

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

也就是說,我們可以取消引用指針,而無需訪問它指向的值。 例如:

char *p = NULL;
*p;

我們取消引用NULL指針而不訪問它的值。 或者我們可以做:

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

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

所以簡而言之:取消引用指針意味著將dereference操作符應用於它。 該運算符只返回一個l值,以供將來使用。