这是什么意思:sizeof(0 [a])

时间:2015-09-10 02:21:24

标签: c arrays

当我阅读星号源代码时,我找到了这样的代码行:

#define ARRAY_LEN(a) (size_t) (sizeof(a) / sizeof(0[a]))

我经常使用a[0](*a),但他们使用(0[a])。你能帮我解释一下这个吗?

1 个答案:

答案 0 :(得分:7)

a[0]由编译器翻译为*(a+0)0[a]被翻译为*(0+a)。因此,a[0]0[a]是等效的。

来自C99标准:

  

6.5.2.1数组下标

     

2后缀表达式后跟方括号[]中的表达式是数组对象元素的下标名称。下标运算符[]的定义是E1[E2](*((E1)+(E2)))相同。