まれな例外を持つ式で使用される配列は、最初の要素へのポインタに変換されます。
あなたはこの
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;
暗黙のキャストを使用する必要があり、その出力は
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
ある
#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');
}
}
この実証プログラムを調査