首页 > 解决方案 > 如果 arr 是一个数组,C++ 中的 *&arr 和 *&arr[0] 有什么区别?

问题描述

假设我有一个名为 的整数数组arr。我试图理解 和 之间的*&arr区别*&arr[0]

我在 C++ 中读到,arr本质上是指向数组中第一个元素的指针,并且&arr是指向整个数组的指针。他们都返回相同的地址,我明白了这部分。然后,如果我输入*&arr[0],则返回第一个元素,即值 at arr[0]。但如果我输入*&arr,则arr[0]返回的地址。我的问题是,为什么当我使用 时*&arr,返回的是地址,而不是第一个元素?逻辑会规定,由于运算符*返回值,因此人们会期望*&arr返回第一个元素而不是地址。

谢谢。

标签: c++arrayspointersdereference

解决方案


我在 C++ 中读到,arr本质上是指向数组中第一个元素的指针

这是错误的。如果arr是一个数组,那么它就是一个数组。数组不是指针1

为什么当我使用 *&arr 时,返回的地址是

鉴于这&arr[0]是指向第一个元素的指针,通过指针 ( *&arr[0]) 间接为您提供对第一个元素的左值引用。

鉴于这&arr是一个指向数组的指针,通过指针 ( *&arr) 间接为您提供对数组的左值引用。就像arr,这个数组左值在转换为右值时衰减为指向第一个元素的指针。

除了运算符重载的情况外,*&基本上是相互抵消的。它们是逆运算。*&arr[0]给你arr[0]*&arr给你一样arr


1除了在函数参数的声明中,数组参数实际上根本没有声明一个数组,而是一个指向该数组元素的指针。


推荐阅读