int a[10]; 下列哪個不等於 &a[1]?
a + sizeof(int)&a[0] + 1(int*)&a + 1(int*)((char*)&a + sizeof(int))| 選項 | 型別 | 運算 | 結果位址 | 等於 &a[1]? |
|---|---|---|---|---|
| A | int* | a + 4 (sizeof(int)=4,指標+4 跳 4 個 int = 16 位元組) | 0x1010 | ❌ (正確是 0x1004) |
| B | int* | &a[0] + 1 → 跳 1 個 int = 4 位元組 | 0x1004 | ✅ |
| C | int* | (int*)&a + 1 → &a 型別 int(*)[10],+1 跳整個陣列 40 位元組,再轉 int* | 0x1028 | ❌ |
| D | int* | (char*)&a + 4 → 位元組+4,轉 int* | 0x1004 | ✅ |
A 與 C 都不等於 &a[1],但單選題通常考察 A(sizeof(int) 與指標算術步長混淆最易錯)。
#includeint main(void) { int a[10] = {1,2,3,4,5,6,7,8,9,0}; printf("a+sizeof(int) = %p\n", (void*)(a + sizeof(int))); printf("&a[0]+1 = %p\n", (void*)(&a[0] + 1)); printf("(int*)&a+1 = %p\n", (void*)((int*)&a + 1)); printf("(int*)((char*)&a+sizeof(int)) = %p\n", (void*)((int*)((char*)&a + sizeof(int)))); printf("&a[1] = %p\n", (void*)&a[1]); return 0; }
a+sizeof(int) = 0x7ffe...10 &a[0]+1 = 0x7ffe...04 (int*)&a+1 = 0x7ffe...28 (int*)((char*)&a+sizeof(int)) = 0x7ffe...04 &a[1] = 0x7ffe...04