2017-06-04 8 views

答えて

6

まれな例外を持つ式で使用される配列は、最初の要素へのポインタに変換されます。

あなたはこの

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'); 
    } 
} 

この実証プログラムを調査

関連する問題