2011-11-14 112 views
0

我在學習C,現在我在指針中發生混亂。我的問題是,爲什麼不printf(「%d」,*(i));使用多維數組時返回元素而不是地址?C中指針的混亂

#include <stdio.h> 

int main() 
{ 
    int i[2][2] = {{1,8},{2,9},{3, 4}}; 
    //int i[2] = {1,2,3}; 
    printf("%d", *(i)); 
    printf("\n%d", i); 
} 
+1

請注意,在你的代碼中,'i'的長度是2,但初始化程序有3個元素。 –

回答

6

嗯,這是一個數組的數組,所以索引/提領一次給你一個數組,其衰減到指針...

+0

是的,本文中的圖像應該進一步解釋:http://c-faq.com/~scs/cclass/int/sx9b.html – dbrank0

+1

@ dbrank0:您鏈接到的頁面是關於「模擬多維數組「通過幾個級別的指針數組。這與我們在這裏的「正常」多維數組有所不同。因此,對於這個問題,圖片並不是真的正確。 –

+0

是的。忘記以上評論。圖像是錯誤的。 – dbrank0

1

因爲多維數組可以寫爲**我所以你在做*(i)給你第一個數組的地址。