#define ArrayLength(x)(sizeof(x)/ sizeof(*(x)))是什么意思?

ane*_*yzm 4 c arrays pointers

这条线究竟意味着什么?

很清楚定义是什么,但我不明白为什么在分母处传递x的指针:

#define ArrayLength(x) (sizeof(x)/sizeof(*(x)))
Run Code Online (Sandbox Code Playgroud)

谢谢

miz*_*izo 7

分母

sizeof(*(x))
Run Code Online (Sandbox Code Playgroud)

数组第一个元素长度,以字节为单位.变量x是一个数组类型,它衰减到指针,指向数组的开头.星号(*)是解除引用运算符,因此*(x)表示"指向的数据x".

分子

sizeof(x)
Run Code Online (Sandbox Code Playgroud)

sizeof运算符应用于数组类型.这给出了整个数组的长度,以字节为单位.

宏也可以写成

#define ArrayLength(x) (sizeof(x)/sizeof(x[0]))
Run Code Online (Sandbox Code Playgroud)

这可能更容易阅读.