-3

所以当我的同学们写下那句话时,我几乎对他们大发雷霆

&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

4

1 回答 1

1
于 2017-01-10T18:35:27.137 回答