在C中,数组中第一个元素的地址是否与数组的地址相同?

时间:2011-06-09 06:59:53

标签: c

考虑一下:

int i[50];
void *a = i; //i.e. = &i[0]
void *b = &i;

a == b永远都是真的,还是有平台/编译器可能并不总是这样?

3 个答案:

答案 0 :(得分:5)

是的,标准(平等运营商)第6.5.9段说:

  

两个指针比较相等,如果......两者   是指向同一个对象的指针   (包括指向对象的指针和   一个子对象的开头)

答案 1 :(得分:1)

是的,投放到void*的值是相同的......但原始类型不是。

具有

int arr[100];

arr,当它衰减到指向其第一个元素的指针时,其类型为*int;
&arr的类型为int (*)[100]

答案 2 :(得分:0)

在这种特殊情况下,是的,报告a和b都是相同的,因为所讨论的数组是1D。仅供参考 - 如果它是2D或更高维数的阵列,这不是真的吗?在这种情况下,请阅读有关数组指针的更多信息。很高兴知道概念,但更好地避免了保持良好的代码可读性。