-1

私はこのスニペットに出くわしました:

#include<stdio.h>
int main()
{
    int a[2][2][2] = { {10,2,3,4}, {5,6,7,8} };
    int *p,*q;
    p=&a[2][2][2];
    *q=***a;
    printf("%d----%d",*p,*q);
    return 0;
}

出力:ガベージ値 ---- 1

これは説明でした:

p=&a[2][2][2] you declare only two 2D arrays, but you are trying to access
the third 2D(which you are not declared) it will print garbage values. *q=***a starting address of a is assigned integer pointer. Now q is pointing to starting address of a. If you print *q, it will print first element of 3D array.    

しかし、私はまだ同じことを理解することができません。分かりやすく教えていただきたいです(上記の説明に文句を言っているわけではありません)。

6行目と7行目の説明をお願いします。

4

1 に答える 1

1

コードにはいくつかの問題があります。

#include<stdio.h>
int main()
{
    int a[2][2][2] = { {10,2,3,4}, {5,6,7,8} };

aは 3D 配列として宣言されていますが、2D 配列で初期化します。

    int *p,*q;
    p=&a[2][2][2];

p無効なメモリ位置に初期化されています。aは次元ごとに 2 つの要素しかないため、有効な添え字はと0のみです1

    *q=***a;

qメモリ内の有効な場所を指すように初期化されていません。qとのデファレンシング*qは未定義の動作です。

    printf("%d----%d",*p,*q);
    return 0;
}
于 2013-07-19T00:49:27.400 に答える