Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过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,因此*pa。现在,将a中的*(*(a+1) + 0)替换为*p。这就是第三个答案

关于c++ - 解释以下程序的O/P ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33473380/

10-11 00:32