C 需要解释-三维数组、指针
我偶然发现了这个片段:C 需要解释-三维数组、指针,c,arrays,pointers,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; } 然而,我仍然无法理解这一点。我希望以易于理解的方式提供相同的信息(并非我在抱怨上述解释)。 请提供第6行和第7
#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;
}
然而,我仍然无法理解这一点。我希望以易于理解的方式提供相同的信息(并非我在抱怨上述解释)。
请提供第6行和第7行的解释。您的代码有几个问题:
#include<stdio.h>
int main()
{
int a[2][2][2] = { {10,2,3,4}, {5,6,7,8} };
p
被初始化为无效的内存位置。由于a
每个维度只有2个元素,因此唯一有效的下标是0
和1
*q=***a;
q
尚未初始化为指向内存中的有效位置。使用*q
去参考q
是未定义的行为
printf("%d----%d",*p,*q);
return 0;
}
q
未初始化,因此用*q
解除对它的引用是未定义的行为。“我遇到了这个片段”在您的问题中,您是否会提供此代码的源代码或至少完整的上下文?这是一个标准问题,即查找代码片段中的错误或预测我前面提到的输出。请提供教科书中问题的确切措辞,以便我们可以帮助您。通过释义,您可能会遗漏重要信息,从而得出正确答案。谢谢,我们将完成此过程。不是“我的代码”,我是为了练习而写的。你介意为上面的每个错误提供纠正措施吗?这样我就可以关联。@Masse我建议你在其他地方找到“练习代码”。如果这是你当前来源的一个典型例子,那就扔掉它。@Masse当我写下这个答案时,我试着去想我能提出的任何积极的建议。但是,代码的用途还不清楚,所以我无法想出任何方法。谢谢。这些是“预测输出/发现错误”类型的问题。我没有把“错误”看得太重。在我真正“评判”他们之前,我必须先了解他们。
*q=***a;
printf("%d----%d",*p,*q);
return 0;
}