2011-11-14 111 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)给你第一个数组的地址。