2012-05-05 37 views
0

正如我已经学会了,数组名就像一个指针第一element.But:在C的第一要素

int c[]={0,1,2}; 
printf("%d \t %d",c,&c[0]); //Different values,Why? 

而且那么为什么*c=0

+0

'* c'与'c [0]'相同,您已将'c'的第一个元素设置为'0',以便解释该部分。 –

+5

您应该使用'%p'而不是'%d'来打印指针。有时候它并不重要,在一些平台上它做了很多。 – ugoren

+4

这是未定义的行为。 '&c [0]'是一个'int *',但'%d'需要一个'int'。你应该把指针指向'void *'并使用'%p',或者(假设你的平台支持这个)转换为'uintptr_t'并使用''中的一个宏。 –

回答

11

只是一个猜测:你在一个平台上有64位指针和32位的int。您的代码将两个指针值传递给printf,然后将它们解释为int值;可能会将两位64位指针打印为两个独立的整数。

在将它们投射到void*之后,您应该使用%p而不是%d打印指针。

+5

+1。另外,在打印之前,将指针指向'void *'。 – asaelr

+0

+1非常好的猜测 –

相关问题