当我阅读星号源代码时,我找到了这样的代码行:
#define ARRAY_LEN(a) (size_t) (sizeof(a) / sizeof(0[a]))
我经常使用a[0]
或(*a)
,但他们使用(0[a])
。你能帮我解释一下这个吗?
答案 0 :(得分:7)
a[0]
由编译器翻译为*(a+0)
。 0[a]
被翻译为*(0+a)
。因此,a[0]
和0[a]
是等效的。
来自C99标准:
6.5.2.1数组下标
2后缀表达式后跟方括号
[]
中的表达式是数组对象元素的下标名称。下标运算符[]
的定义是E1[E2]
与(*((E1)+(E2)))
相同。