C++ 解释以下程序的o/p
解释以下程序的o/pC++ 解释以下程序的o/p,c++,c,pointers,C++,C,Pointers,解释以下程序的o/p 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以跳转到其类型的
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]
的二维数组。由于此位置尚未分配,因此超出了数组a
。所以,它的行为是未定义的,所以只有它的垃圾值
2) ***p
只是取消引用指针并转到第一个值5
3) 要了解最后一个是如何工作的,您需要了解数组解引用是如何工作的
a[1][0]
实际上变成了*(*(a+1)+0)
,因此将给出值20
。因此,因为p
是&a
,因此*p
是a
。现在将*(*(a+1)+0)
中的a
替换为*p
。这就是第三个答案缩进代码,使其可读性没有太多解释<代码>*(p+1)未定义。