一个发现下面的代码片段:这个C++代码是否产生未定义的行为?
int a[100];
...
int value = 42[a];
这似乎做什么a[42]
一样。
它是一个未定义的行为或完全合法的C++代码的虚假?
一个发现下面的代码片段:这个C++代码是否产生未定义的行为?
int a[100];
...
int value = 42[a];
这似乎做什么a[42]
一样。
它是一个未定义的行为或完全合法的C++代码的虚假?
数组运算符是可交换。
a[n] == *(a + n) == *(n + a) == n[a]
而且它是完全合法的。
这是否意味着''a''总是被当作指针处理? –
@SergeyK。不。它意味着在某些适用于指针的操作中,不适用于数组,而'a'被视为指针。在其他一些操作中,例如'sizeof(a)'或'&a',它不是。 @ᴍarounᴍaroun - 不,他们不是。 (响应于数组是常量指针的已删除注释) –
a[i]
定义为*(a+i)
。
所以42[a]
= a[42];
,它是绝对安全的
42[a]
是完全等同于a[42]
,并完全合法。它的工作原理是因为指针地址只是一个下面的整数,所以你可以做任何一种算法(一个数组变量实际上只是一个伪装的指针)。
尽管可读性通常不是好主意,除非您故意尝试混淆代码。
@TemplateRex:除非您已经知道答案,否则需要时间才能找到这种答案。 –