C 这意味着什么:sizeof(0[a])
当我阅读星号源代码时,我发现一行代码如下:C 这意味着什么:sizeof(0[a]),c,arrays,C,Arrays,当我阅读星号源代码时,我发现一行代码如下: 我经常使用a[0]或(*a),但他们使用(0[a])。你能帮我更清楚地解释一下吗?a[0]由编译器翻译成*(a+0)0[a]翻译为*(0+a)。因此,a[0]和0[a]是等价的 根据C99标准: 6.5.2.1阵列订阅 2后缀表达式后跟方括号中的表达式是数组对象元素的下标指定。下标运算符[]的定义是E1[E2]与(*((E1)+(E2))相同 数组是对称的 这意味着arr[idx]和idx[arr]与编译器完全相同 因此,sizeof(idx[arr]
我经常使用
a[0]
或(*a)
,但他们使用(0[a])
。你能帮我更清楚地解释一下吗?a[0]
由编译器翻译成*(a+0)
<代码>0[a]翻译为*(0+a)
。因此,a[0]
和0[a]
是等价的
根据C99标准:
6.5.2.1阵列订阅
2后缀表达式后跟方括号中的表达式是数组对象元素的下标指定。下标运算符[]
的定义是E1[E2]
与(*((E1)+(E2))
相同
数组是对称的 这意味着
arr[idx]
和idx[arr]
与编译器完全相同
因此,
sizeof(idx[arr])
是数组arr的第idx个元素的字节大小在我看来是一个好问题。指针算法在C语言中是一个可怕的陷阱,更好地理解它的工作原理是一个好主意。这里已经有很多重复。在宏中这实际上节省了2个键入字符:A[0]
可能不正确,因此选项为(a)[0]
或0[a]
。当然还有*(a)
@M.M我强烈建议那些不喜欢打字的程序员改变职业。编程需要大量的打字。那些为了避免键入2个字符而把程序弄得乱七八糟的程序员无论如何都应该改行,或者让别人强迫他们改行。
#define ARRAY_LEN(a) (size_t) (sizeof(a) / sizeof(0[a]))