4

私はこのコードを持っています:

#include <stdio.h>

int main()
{
    int arr[10] = {0};
    int *p1_arr = arr;
    int (*p2_arr)[10] = arr;      // Line 7, Shows Warning here

    ...

    return 0;
}

gccを使用してコンパイルするgcc -g -Wall LengthofArray.cと、次の警告が表示されます。

gcc: LengthOfArray.c:7: [Warning] assignment from incompatible 
                         pointer type [enabled by default]

私の質問は、int (*p2_arr)[10]がサイズ 10 の配列へのポインタである場合、コンパイラがこの警告を表示するのはなぜですか?

また、正しい方法は何ですか?

Windows 7 32 ビット (DevC++)
で gcc 4.7.2 を使用し、SLES 10.3 x86_64 で gcc 4.1.2 もチェックしました。

4

3 に答える 3

5

... int (*p2_arr)[10] がサイズ 10 の配列へのポインタの場合...

p2_arrサイズ 10 の配列を指すように、サイズ 10 の配列のアドレスを割り当てる必要があります

int (*p2_arr)[10] = &arr;   
于 2013-10-18T16:16:57.973 に答える
4

arr(任意の配列と同様) は、最初の要素へのポインター(配列自体へのポインターではなく) に崩壊します。これはint *. 正しい動作を取得するには、次のようにアドレスを取得します。

p2_arr = &arr;
于 2013-10-18T16:17:43.320 に答える