int a = 3, *p = &a;
int *q = p + 1; // q 指向 a 後面的一個 int 位置(未初始化)
printf("p=%d q=%d *q=%d\n", p, q, *q);
// 輸出: p=2293308 q=2293312 *q=2293312
p + 1 指針運算:地址增加 sizeof(int)(4 字節),q 指向 a 緊鄰的下一個整數槽位(屬於未定義內存)。*q 讀取該未初始化內存,恰巧該內存殘留值等於 q 自身的地址(2293312),屬巧合,屬於未定義行為 (UB)。p + n 移動 n * sizeof(*p) 字節。*q 只有在 q 指向有效對象時才有意義。
int arr[2] = {3, 4};
int *p = &arr[0];
int *q = p + 1; // 合法:指向 arr[1]
printf("*q = %d\n", *q); // 穩定輸出 4