Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 这意味着什么:sizeof(0[a])_C_Arrays - Fatal编程技术网

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]))