2015-11-02 53 views
-6

解释以下程序的o/p。解释以下程序的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)); 
} 

OUTPUT: -

Garbage, 5,20? 
+0

缩进你的代码,并使其可读 – Gopi

+0

没有什么可以解释的; '*(p + 1)'是未定义的。 – molbdnilo

回答

3

p是指向尺寸[2][3]的2D rray。

1)p+1这将增加p跳转到其类型的下一个变量,这是二维数组的大小为[2][3]。由于这个地方还没有被分配,所以它超出了阵列a。所以,它的不确定的行为,所以它仅给垃圾值..

2)***p只是取消引用指针和去的第一个值5

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