2015-11-02 24 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。這就是第三個答案是