解释以下程序的o/p

Explain the o/p of following program

本文关键字:程序 解释      更新时间:2023-10-16

解释以下程序的o/p。

int main()
{
    int a [2][3] = {5,10,15,20,25,30}; 
    int (*p) [2][3] =&a;
    printf ("%dt", ***(p+1)); 
    printf ("%dt", ***p); 
    printf ("%dt", ** (*p+1));
}

输出:-

Garbage, 5,20?

p是指向大小为[2][3]的2D数组的指针。

1) p+1这将递增p以跳到其类型的下一个变量,即大小为[2][3]的2D数组。由于此位置尚未分配,它超出了数组a。所以,它的未定义行为,所以只有它给出垃圾值。。

2) ***p只是取消引用指针并转到第一个值5

3) 要了解最后一个是如何工作的,您需要了解数组取消引用的工作原理。a[1][0]实际上变为*(*(a+1) + 0),因此将给出值20。因此,因为p&a,所以*pa。现在用*p替换*(*(a+1) + 0)中的a。这就是第三个答案