取消引用指標

int a = 1;
int *a_pointer = &a;

要取消引用 a_pointer 並更改 a 的值,我們使用以下操作

*a_pointer = 2;

這可以使用以下列印語句進行驗證。

printf("%d\n", a); /* Prints 2 */
printf("%d\n", *a_pointer); /* Also prints 2 */

但是,人們會錯誤地取消引用 NULL 或其他無效指標。這個

int *p1, *p2;

p1 = (int *) 0xbad;
p2 = NULL;

*p1 = 42;
*p2 = *p1 + 1;

通常是未定義的行為p1 可能無法解除引用,因為它指向的地址 0xbad 可能不是有效地址。誰知道那裡有什麼?它可能是作業系統記憶體或其他程式的記憶體。使用這種程式碼的唯一時間是嵌入式開發,它將特定資訊儲存在硬編碼地址中。p2 不能被解除引用,因為它是 NULL,這是無效的。