Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
4年前关闭。
解释以下程序的输出。
输出:-
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
4年前关闭。
解释以下程序的输出。
int main()
{
int a [2][3] = {5,10,15,20,25,30};
int (*p) [2][3] =&a;
printf ("%d\t", ***(p+1));
printf ("%d\t", ***p);
printf ("%d\t", ** (*p+1));
}
输出:-
Garbage, 5,20?
最佳答案
p
是大小为[2][3]
的二维栅格的指针。
1)p+1
这将使p
递增以跳转到其类型的下一个变量,即大小为[2][3]
的2D数组。由于尚未分配此位置,因此它超出了数组a
。因此,它的行为不确定,因此仅给出垃圾值。
2)***p
只是取消引用指针并转到第一个值5
3)要了解最后一个的工作方式,您需要了解数组解引用的工作方式。 a[1][0]
实际上变为*(*(a+1) + 0)
,因此将给出值20
。因此,由于p
是&a
,因此*p
是a
。现在,将a
中的*(*(a+1) + 0)
替换为*p
。这就是第三个答案
关于c++ - 解释以下程序的O/P ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33473380/
10-11 00:32