c++ - 如果 arr 是一个数组,C++ 中的 *&arr 和 *&arr[0] 有什么区别?
问题描述
假设我有一个名为 的整数数组arr
。我试图理解 和 之间的*&arr
区别*&arr[0]
。
我在 C++ 中读到,arr
本质上是指向数组中第一个元素的指针,并且&arr
是指向整个数组的指针。他们都返回相同的地址,我明白了这部分。然后,如果我输入*&arr[0]
,则返回第一个元素,即值 at arr[0]
。但如果我输入*&arr
,则arr[0]
返回的地址。我的问题是,为什么当我使用 时*&arr
,返回的是地址,而不是第一个元素?逻辑会规定,由于运算符*
返回值,因此人们会期望*&arr
返回第一个元素而不是地址。
谢谢。
解决方案
我在 C++ 中读到,
arr
本质上是指向数组中第一个元素的指针
这是错误的。如果arr
是一个数组,那么它就是一个数组。数组不是指针1。
为什么当我使用 *&arr 时,返回的地址是
鉴于这&arr[0]
是指向第一个元素的指针,通过指针 ( *&arr[0]
) 间接为您提供对第一个元素的左值引用。
鉴于这&arr
是一个指向数组的指针,通过指针 ( *&arr
) 间接为您提供对数组的左值引用。就像arr
,这个数组左值在转换为右值时衰减为指向第一个元素的指针。
除了运算符重载的情况外,*&
基本上是相互抵消的。它们是逆运算。*&arr[0]
给你arr[0]
和*&arr
给你一样arr
。
1除了在函数参数的声明中,数组参数实际上根本没有声明一个数组,而是一个指向该数组元素的指针。
推荐阅读
- c# - 从 2 个不同的应用程序访问类库的公共变量
- java - 如何将 java 映射展平为列表,以便列表交替键和值?
- java - 无法使用 jshell 启动 Spring Boot 应用程序
- c# - 从 JSON 字符串中提取 DateTime
- mongodb - 如何比较嵌套文档数组中的字段
- json - MongoDB 上的 JSONPath 查询?
- react-native - postMessage 调用 React 原生 WebView 组件导致不需要的副作用
- apache-nifi - 将 nifi 模板从一个 HDF 复制到另一个
- scala - Intellij - 在 IDE 中删除 Preedf 和 scala 自动导入
- fasttext - Read N words 和 Number of words 的区别:fasttext 中的 M