表达式中使用的数组很少有例外,它被转换为指向其第一个元素的指针。
如果有这样
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