所以当我的同学们写下那句话时,我几乎对他们大发雷霆
&array
给你第一个元素的地址
但事实证明他们是对的。这对我来说听起来很矛盾。我们正在谈论这样定义的数组:
int numbers[] = {1,2,3,4};
变量numbers
是(我认为)then 类型int* const
。我认为指向那个的指针是int** const
. 但显然这个表达式的计算结果为真:
if(&numbers == numbers) {
printf("Pointer to array is still the same array!\n");
}
当然,这也是正确的:
int* first_elm_ptr = &numbers;
if(*first_elm_ptr == *numbers)
printf("%d == %d\n", *first_elm_ptr, *numbers);
因此,显然您无法获得指向该数组的变量保存地址的指针。表达&numbers
本质上是没有意义的。也许它甚至被编译器删除。
这怎么可能?我现在很困惑!标准如何解释这种行为?我做了一个ideone测试代码来验证这一点:http: //ideone.com/pYffYx