表達式中使用的數組很少有例外,它被轉換爲指向其第一個元素的指針。
如果有這樣
int my_array[5][5];
陣列那麼它是數組的數組是所述陣列的所述元件具有類型int[5]
。例如,表達式my_array[0]
具有類型int[5]
。因此表達式中使用的數組被轉換爲指向其第一個元素(到其第一個「行」)的類型int (*)[5]
的指針。
類型int *
和int (*)[5]
是不同的類型,並且不存在從一種類型到另一種類型的隱式轉換。
表達式&my_array[0][0]
的類型爲int *
。
所以,如果你想在陣列重新解釋爲一維數組,你需要使用隱式轉換
ptr = (int *)my_array;
調查這個示範項目
#include <stdio.h>
int main(void)
{
int my_array[5][5] =
{
{ 1, 2 },
{ 3, 4, 5 },
{ 6 },
{ 7 }
};
for (int(*p)[5] = my_array; p != my_array + 5; ++p)
{
for (int *q = *p; q != *p + 5; ++q)
{
printf("%d ", *q);
}
putchar('\n');
}
}
它的輸出是
1 2 0 0 0
3 4 5 0 0
6 0 0 0 0
7 0 0 0 0
0 0 0 0 0