このプログラムを入力して、10 個の整数の配列のアドレスを、2 つの整数の配列を指すポインターに割り当てています。
int (*a)[2],i;
int a1[10]={1,12,3,4,5};
a=a1;
printf("%d",*(*a+1));
出力は 12 ですが、警告も表示されます。
「互換性のないポインター型からの代入 [デフォルトで有効]」
この警告が表示される理由と、この警告を取り除く方法を教えてください。
2 つの問題があります。
aは2 つの整数の配列へのポインターですが、 10 個の整数の配列から代入しようとしています。
a配列へのポインターa1であり、そうではありません。
最初aに、10 個の整数の配列へのポインターになるように変更します。
int (*a)[10];
次に、配列へのポインターを割り当てます。
a = &a1;
この警告が表示される理由
a1は であるため、ポインターに割り当てられるint[10]と に崩壊しますが、型は互換性のない型です。int *aint (*)[2]
この警告を取り除く方法は?
として宣言aしint (*a)[10]、次に address-of ( &) 演算子を使用します。
a = &a1;
コンパイル時の境界チェックが必要ですか?
そうでない場合は、次のようにしてください。
int *a, i;
int a1[10]={1,12,3,4,5};
a=&a1[0];
printf("%d",a[1]);