This question问为什么:
a[5] == 5[a]
字符串
它在所有方面都得到了回答,除了一个...
为什么一开始就允许在整数后面放一个数组下标?为什么不允许写这样的东西:
[a]5
型
或者:
[5]a
型
或者把[]
放在其他奇怪的地方?
换句话说,数组索引运算符允许的位置的定义是什么?
**注意:**我不认为我的问题是重复的。我的问题是关于数组下标运算符允许的语法。它是通过引用标准中从未出现在我应该重复的问题中来回答的。它是相似的,是的,但不是重复。
This question问为什么:
a[5] == 5[a]
字符串
它在所有方面都得到了回答,除了一个...
为什么一开始就允许在整数后面放一个数组下标?为什么不允许写这样的东西:
[a]5
型
或者:
[5]a
型
或者把[]
放在其他奇怪的地方?
换句话说,数组索引运算符允许的位置的定义是什么?
**注意:**我不认为我的问题是重复的。我的问题是关于数组下标运算符允许的语法。它是通过引用标准中从未出现在我应该重复的问题中来回答的。它是相似的,是的,但不是重复。
3条答案
按热度按时间nzrxty8p1#
C11标准中的后缀表达式语法:
字符串
C11标准的主要表达式语法:
型
5是一个整数常量,所以5[a]匹配如下:
型
希望这就是你的意思。
编辑:我忘了提到这一点,但其他评论已经这样做了:
禁止无意义的浮点常量下标需要“整数类型”。
yks3o0rb2#
在C标准的数组下标运算符部分定义如下:
(C99,6.5.2.1p2)“后缀表达式后跟方括号中的表达式[]是数组对象元素的下标指定。下标运算符[]的定义是E1[E2]等同于(*((E1)+(E2)。”
关于
E1
和E2
的允许类型:(C99,6.5.2.1p1)“其中一个表达式应具有类型”指向对象类型的指针“,另一个表达式应具有整数类型,并且结果具有类型”类型“。”
zxlwwiss3#
a[5]
转换为*(a+5)
。加法是可交换的,所以a+5 = 5+a
,可以转换回5[a]
。我同意这是一个相当无用的功能,但地狱,为什么不呢?