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

标签 c arrays pointers

这行到底是什么意思?

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

#define ArrayLength(x) (sizeof(x)/sizeof(*(x)))

谢谢

最佳答案

分母

sizeof(*(x))

数组中第一个元素的长度,以字节为单位。变量x是数组类型, decays 指向一个指针,指向数组的开始。星号 (*) 是 dereference operator ,所以 *(x) 表示 x 指向的数据”

分子

sizeof(x)

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

宏也可以写成

#define ArrayLength(x) (sizeof(x)/sizeof(x[0]))

这可能更容易阅读。

关于c - #define ArrayLength(x) (sizeof(x)/sizeof(*(x))) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7331405/

相关文章:

c - 对齐 ls 中的列

c - 求给定字符串中数字的总和

c++ - 将 void* 转换为 std::function<void()>

c++ - 如何获取指向 Qt 容器中原始数据的指针?

c - 关于传递在函数中创建的变量的问题

c - C 中的字符串反转

c - hiredis 失败,主机名中包含用户名和密码

arrays - 从字典创建有序数组

Python,在列表中的每个项目上 append 字符串

c++ - 使用 const 成员变量索引数组