我在标准中哪里可以找到关于*p和p[0]、*(p+1)和p[1]之间等价性的引用.

Where can I find in the Standard a reference to the equivalence between *p and p[0], *(p+1) and p[1], ...?

本文关键字:p+1 之间 引用 标准      更新时间:2023-10-16

在下面的代码段中,符号*p等效于p[0]*(p + 1)等效于p[1],依此类推

int* p = new int[3] { 1, 2, 3};
cout << *p << ' ' << *(p + 1) << ' ' << *(p + 2) << 'n';
cout << p[0] << ' ' << p[1] << ' ' << p[2] << 'n';

在标准中,我在哪里可以找到这种等效性的参考?

这在C++14标准草案第5.2.1节订阅[expr.sub](emphasis mine(:中有介绍

后缀表达式后跟方括号中的表达式是后缀表达式。其中一个表达式应具有类型"T的数组"或"指向T的指针",另一个应具有无范围枚举或积分型。[…]表达式E1[E2](根据定义(与*(((E1(+(E2((相同[注:有关*和+阵列的详细信息见8.3.4--尾注],

本段引用了*5.3部分,其中写道:

一元*运算符执行间接操作:应用它的表达式应是指向对象类型,或指向函数类型的指针,结果是引用该对象或函数的左值表达式所指向的。如果表达式的类型是"指向T的指针",则结果的类型为"T."[…]

以及CCD_ 8的CCD_

当具有整型的表达式被添加到指针或从指针中减去时,结果的类型为指针操作数的。[…]如果表达式P指向数组对象的第i个元素,表达式(P(+N(等价地,N+(P((和(P(-N(其中N的值为N(分别指向阵列的第i+N个和第i−N个元素对象,前提是它们存在[…]

C++14:

5.2.1订阅

相关部分:

1。。。这个表达式E1[E2](根据定义(与*((E1)+(E2))相同。。。

5.3.1一元运算符

相关部分:

1一元*运算符执行间接操作:应用它的表达式应是指向对象类型,或指向函数类型的指针,结果是引用该对象或函数的左值表达式所指向的。如果表达式的类型为"指向T的指针",则结果的类型为"T."…

5.7加法运算符

相关部分:

5。。。换句话说,如果表达式P指向数组对象的第i个元素,表达式(P)+N(相当于N+(P)(和(P)-N(其中N的值为n(分别指向阵列的第i+n-个和第i−n>个元素对象,只要它们存在。。。