<分区>
Possible Duplicate:
In C arrays why is this true? a[5] == 5[a]
谁能解释为什么对于任何数组表达式 c a[7] == 7[a]
都是真的。
有没有可能是假的
我在 wiki 上看到 x[i] 是 *(x+i) 的语法糖,它等于 *(i+x),这是 i[x],但我无法正确理解它.
<分区>
Possible Duplicate:
In C arrays why is this true? a[5] == 5[a]
谁能解释为什么对于任何数组表达式 c a[7] == 7[a]
都是真的。
有没有可能是假的
我在 wiki 上看到 x[i] 是 *(x+i) 的语法糖,它等于 *(i+x),这是 i[x],但我无法正确理解它.
最佳答案
a[7]
等价于*(a + 7)
。7[a]
等同于 *(7 + a)
。这给出了相同的结果,因为向指针添加一个整数是 commutative操作。
is there any case that it can be false
简短的回答是否定的。对于简单的指针运算,它将始终为真。
长话短说,要找到反例,您必须使用 hack。一种方法是使用宏:
#include <stdio.h>
#define a 1+s
int main(void) {
char s[] = "1q2w3e4r5t6y";
int x = a[7];
int y = 7[a];
printf("%c %c\n", x, y);
return 0;
}
结果:
s 5
结果是不同的,因为宏展开后表达式变得不同:1+(s[7])
与 7[1+s]
。
在线查看:ideone
关于c - 为什么对于任何 C 数组,此表达式都包含 a[7] == 7[a],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13947862/