在With arrays, why is it the case that a[5] == 5[a]?中,解释了[]
中的a[5]
运算符定义为*(a + 5)
,而+
是可交换的,5[a]
表示*(5 + a)
所以这两个表达式引用相同的内存位置。细
但是,C在6.4.2.1中也定义了标识符不能以数字开头。在5[a]
中,数组标识符为5
,它不是有效的标识符。为什么5[a]
不会生成有关无效标识符的错误?
答案 0 :(得分:10)
5
不是标识符,它是整数文字。
C标准字面上指出5[a]
只是必须与*(5 + a)
等同的语法糖。 C中没有要求+运算符的第一个操作数是标识符,因此代码工作正常。
另外,两个操作数都应具有算术类型,或一个 操作数应该是指向完整对象类型和另一个的指针 应具有整数类型。