已知 int a[3][3] = {1,2,3,4,5,6,7,8,9},下列哪個不能表示 a[2][1] 的位址?
&a[2][1]*(a[2] + 1)a[2] + 1*(a + 2) + 1| 選項 | 型別 | 值 | 是否為位址 |
|---|---|---|---|
A &a[2][1] | int* | 第 2 列第 1 行元素位址 | ✅ 是 |
B *(a[2] + 1) | int | 解參考後得到元素值 8 | ❌ 否(這是值) |
C a[2] + 1 | int* | 第 2 列起始位址偏移 1 個 int → 同 A | ✅ 是 |
D *(a + 2) + 1 | int* | a+2 指向第 2 列,解參考得列首位址,+1 同 C | ✅ 是 |
a 退化為指向首列的指標(int (*)[3])。a[2] 相當於 *(a+2),型別為 int*,指向第 2 列首元素。指標 + 整數 進行位址運算,單位為所指型別大小(sizeof(int))。*指標 解參考得到值或子陣列首位址。選項 B 經過解參考(*),得到的是 元素值 而非位址,故為正確答案。