gpt4 book ai didi

c - 为什么指向数组的指针(由 &array 完成)等于数组本身?

转载 作者:行者123 更新时间:2023-11-30 21:00:24 24 4
gpt4 key购买 nike

所以当我的同学写下这段话时,我几乎对他们大喊大叫

&array gives you address of the first element

但事实证明他们是对的。这对我来说听起来不一致。我们正在讨论这样定义的数组:

int numbers[] = {1,2,3,4};

变量numbers (我认为)那么类型为int* const 。我认为指向它的指针是 int** const 。但显然这个表达式的计算结果为 true:

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

最佳答案

数组的地址和数组第一个元素的地址本质上是相同的(相同的地址位置)。它们的类型不同。

Expression &numbers is essentially meaningless

不,不是。

就你而言,

  • &numbers 的类型为 int (*) [4]
  • numbers 的类型为 int [4],在某些情况下注意,它会衰减为 int * >.
<小时/>

注意:

引用 C11,第 §6.3.2.1 章

Except when it is the operand of the sizeof operator, the _Alignof operator, or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object [....]

关于c - 为什么指向数组的指针(由 &array 完成)等于数组本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41575903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com