-1

このプログラムを入力して、10 個の整数の配列のアドレスを、2 つの整数の配列を指すポインターに割り当てています。

int (*a)[2],i;
int a1[10]={1,12,3,4,5};
a=a1;
printf("%d",*(*a+1));

出力は 12 ですが、警告も表示されます。

「互換性のないポインター型からの代入 [デフォルトで有効]」

この警告が表示される理由と、この警告を取り除く方法を教えてください。

4

3 に答える 3

4

2 つの問題があります。

  1. aは2 つの整数の配列へのポインターですが、 10 個の整数の配列から代入しようとしています。

  2. a配列へのポインターa1であり、そうではありません。

最初aに、10 個の整数の配列へのポインターになるように変更します。

int (*a)[10];

次に、配列へのポインターを割り当てます。

a = &a1;
于 2013-07-26T06:15:31.800 に答える
1

この警告が表示される理由

a1は であるため、ポインターに割り当てられるint[10]と に崩壊しますが、型は互換性のない型です。int *aint (*)[2]

この警告を取り除く方法は?

として宣言aint (*a)[10]、次に address-of ( &) 演算子を使用します。

a = &a1;
于 2013-07-26T06:16:07.807 に答える
0

コンパイル時の境界チェックが必要ですか?

そうでない場合は、次のようにしてください。

int *a, i;
int a1[10]={1,12,3,4,5};
a=&a1[0]; 
printf("%d",a[1]);
于 2013-07-26T08:02:52.547 に答える