这个C ++代码是否会产生未定义的行为?

Does this C++ code produce an undefined behavior?

本问题已经有最佳答案,请猛点这里访问。

a找到了以下代码段:

1
2
3
int a[100];
...
int value = 42[a];

这似乎正是a[42]所做的。

它是一个具有未定义行为的假象还是一个完全合法的C++代码?


这是完全合法的。在指针运算中,a[42]相当于*(a + 42),其(加法是交换的)相当于*(42+ a),其(根据[]的定义)相当于42[a]

所以它是模糊的,但定义明确。


数组运算符是可交换的。

埃多克斯1〔5〕

这是完全合法的。


a[i]定义为*(a+i)

所以42[a]=a[42];是完全安全的


42[a]a[42]完全相同,完全合法。它的工作原理是,指针地址只是下面的一个整数,所以您可以用任何一种方法来进行算术运算(数组变量实际上只是一个薄伪装的指针)。

不过,对于可读性来说,这通常不是一个好主意,除非您有意地试图混淆代码。