このプログラムを入力して、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 *
a
int (*)[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]);