需要说明 - 三维数组,指针

时间:2013-07-19 00:45:18

标签: c arrays pointers

我遇到了这个片段:

#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行提供。

1 个答案:

答案 0 :(得分: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个元素,因此唯一有效的下标为01

    *q=***a;

q尚未初始化为指向内存中的有效位置。使用q导出*q是未定义的行为。

    printf("%d----%d",*p,*q);
    return 0;
}