5

warning: assignment from incompatible pointer type [enabled by default]次のコードをコンパイルすると、次のようになります。

int main() {
     int (*aptr) [5] = NULL;
     int arr[5] = {1,2,3,4,5};

     aptr = &arr[0];

     printf("aptr = %p\n arr = %p\n", aptr, &arr[0]);
     return 0;
}

私は正しい出力を得ています:

aptr = 0xbfcc2c64
arr = 0xbfcc2c64

しかし、互換性のないポインター型の警告が表示されるのはなぜですか?

4

2 に答える 2

9

配列全体へのポインターを宣言しました。最初の要素を指すようにしようとしているのはなぜですか?

aptrあなたの例のようにwithint (*)[5]型を宣言しarr、それを指すようにしたい場合、これはポインタ値を設定する方法です

aptr = &arr;

int *コードにあるのは、型のポインターに値を代入しようとする試みint (*)[5]です。これらは異なるタイプであるため、警告が表示されます (これは、実際には制約違反、AKA エラーです)。

于 2013-07-05T07:05:25.360 に答える
1

配列名自体はベースアドレスを指定し、&arr を使用する必要はありません。さらに、arr[0] は最初のインデックスの値を表します。

于 2014-11-01T16:02:32.387 に答える