【问题标题】:Is there a conversion from pointer to array? [duplicate]是否存在从指针到数组的转换? [复制]
【发布时间】:2022-12-02 22:22:24
【问题描述】:

比如下面的代码,我知道p是一个指针,它指向arr数组的第一个元素,我也知道这个数组会退化为certain conditions下的数组,但是为什么可以对这里的指针进行[]操作吗?

#include<iostream>
using namespace std;
int main()
{
  int arr[10];
  arr[3] = 10;
  int* p = arr;
  cout << p[3];
  return 0;
}

有这方面的文件吗?
run it online

【问题讨论】:

  • 当然有文档,C++ 由 C++ 标准记录。相关引用:eel.is/c++draft/expr.sub#2.sentence-5。重要部分:“表达式 E1[E2] 等同于(根据定义)*((E1)+(E2))...”.
  • 这至少可以追溯到 B 语言(1969 年)。

标签: c++ arrays pointers


【解决方案1】:

来自 C++ 20 标准(7.6.1.2 下标)

1 后缀表达式后跟方括号中的表达式是 后缀表达式。表达方式之一应为 键入“T 的数组”或“指向 T 的指针”类型的纯右值和另一个 应为无作用域枚举或整数类型的纯右值。这 结果是类型“T”。类型“T”应该是一个完全定义的 object type.62 表达式 E1[E2] 等同于(根据定义) *((E1)+(E2)),除了在数组操作数的情况下,如果该操作数是左值,则结果是左值,否则是 xvalue。这 表达式 E1 排在表达式 E2 之前。

也就是说,当在此表达式 *((E1)+(E2)) 中使用数组时,它会隐式转换为指向其第一个元素的指针。

【讨论】:

  • 看来我的搜索能力(还有我的耐心)倒退了一些,不过为了保留答案我还是决定保留这个问题=_=
  • @Kargath 谢谢。不客气。:)
猜你喜欢
  • 2022-08-24
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
  • 2014-02-09
  • 2022-01-01
相关资源
最近更新 更多