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

标签 c arrays

<分区>

我在阅读asterisk源码的时候,发现了这样一行代码:

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

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

最佳答案

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

来自 C99 标准:

6.5.2.1 Array subscripting

2 A postfix expression followed by an expression in square brackets [] is a subscripted designation of an element of an array object. The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))).

关于c - 这是什么意思 : sizeof(0[a]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32492067/

相关文章:

java - 关于java和数组在方法中搜索并返回数据

c++ - 对于我的关键代码部分,如何在短时间内关闭操作系统中切换线程的中断?

c - 为什么以 0 开头的整数打印出来很奇怪?

javascript - .filter() 数组使用另一个数组的元素

c - 使用并行处理 MPI 迭代 2D 数组

C# - 将字节数组转换为结构数组,反之亦然(反向)

C/总帐 : Using -1 as sentinel on array of unsigned integers

c++ - 模拟模板的 C 错误

c++ - 访问冲突读取位置 0x00184000

c++ - 输出是垃圾值