正如我已经学会了,数组名就像一个指针第一element.But:在C的第一要素
int c[]={0,1,2};
printf("%d \t %d",c,&c[0]); //Different values,Why?
而且那么为什么*c=0
?
正如我已经学会了,数组名就像一个指针第一element.But:在C的第一要素
int c[]={0,1,2};
printf("%d \t %d",c,&c[0]); //Different values,Why?
而且那么为什么*c=0
?
只是一个猜测:你在一个平台上有64位指针和32位的int
。您的代码将两个指针值传递给printf
,然后将它们解释为int
值;可能会将两位64位指针打印为两个独立的整数。
在将它们投射到void*
之后,您应该使用%p
而不是%d
打印指针。
+1。另外,在打印之前,将指针指向'void *'。 – asaelr
+1非常好的猜测 –
'* c'与'c [0]'相同,您已将'c'的第一个元素设置为'0',以便解释该部分。 –
您应该使用'%p'而不是'%d'来打印指针。有时候它并不重要,在一些平台上它做了很多。 – ugoren
这是未定义的行为。 '&c [0]'是一个'int *',但'%d'需要一个'int'。你应该把指针指向'void *'并使用'%p',或者(假设你的平台支持这个)转换为'uintptr_t'并使用''中的一个宏。 –