int a[5] = {1,2,3,4,5};
int *p = (int*)(&a + 1);
printf("%d, %d\n", *(a + 1), *(p - 1));
2, 5
| 表達式 | 類型 | 值/含義 |
|---|---|---|
a | int* (退化) | 首元素地址 &a[0] |
&a | int(*)[5] | 整個數組地址 |
&a + 1 | int(*)[5] | 跨過整個數組,指向數組尾後 |
(int*)(&a + 1) | int* | 指向 a[5] (不存在的第6個元素位置) |
p - 1 | int* | 指向 a[4] (最後一個元素,值 5) |
a + 1 | int* | 指向 a[1] (值 2) |
&a + 1 = 數組指針 + 1 = **跨過整個數組**。a + 1 = 元素指針 + 1 = **移動到下一個元素**。計算數組長度:size_t n = (int*)(&a + 1) - a; (編譯期常量)。