【发布时间】:2020-07-10 07:44:47
【问题描述】:
假设我有一个名为arr 的整数数组。我试图了解*&arr 和*&arr[0] 之间的区别。
我在 C++ 中读到,arr 本质上是指向数组中第一个元素的指针,&arr 是指向整个数组的指针。他们都返回相同的地址,我明白了这部分。然后,如果我输入 *&arr[0] ,则返回第一个元素,即 arr[0] 处的值。但是如果我输入*&arr,则返回arr[0]的地址。我的问题是,为什么当我使用*&arr 时,返回的是地址,而不是第一个元素?逻辑表明,由于运算符 * 返回值,因此人们会期望 *&arr 返回第一个元素而不是地址。
谢谢。
【问题讨论】:
-
为什么你期望
*&arr返回第一个元素?*和&相互抵消,所以*&arr[0]等价于arr[0],*&arr等价于arr。 -
也许你应该用minimal reproducible example 证明你在说什么(所以我们对“如果我输入”有一个精确的含义,因为我们不知道你在哪里输入东西)?定义
arr,然后输出*&arr[0]和*&arr。当你这样做时,还要输出arr[0]和arr并解释为什么你期望*&arr[0]匹配arr[0]但不要期望*&arr匹配arr。 -
*运算符给出了一个左值表达式,它指定了一个内存位置。它不会检索该位置的存储值(该操作称为 lvalue-to-rvalue onversion)
标签: c++ arrays pointers dereference