这条线究竟意味着什么?
很清楚定义是什么,但我不明白为什么在分母处传递x的指针:
#define ArrayLength(x) (sizeof(x)/sizeof(*(x)))
感谢
答案 0 :(得分:6)
sizeof(*(x))
是数组中第一个元素的长度,以字节为单位。变量x
是一个数组类型,它是 decays 指向一个指针,指向数组的开头。星号(*
)是dereference operator,因此*(x)
表示“x
指向的数据”。
sizeof(x)
将sizeof
运算符应用于数组类型。这给出了整个数组的长度,以字节为单位。
#define ArrayLength(x) (sizeof(x)/sizeof(x[0]))
这可能更容易阅读。
答案 1 :(得分:2)
该指针获取数组中的第一个对象。如果我这样写它会更清楚:
sizeof(entireArray) / sizeof(firstObjectInArray)
答案 2 :(得分:0)
事实证明是这样的
int a[]={1,2,3};
foo(a, sizeof(a)/sizeof(a[0]));
在你的情况下将是
foo(a, sizeof(a)/sizeof(1));
即整数大小
foo(a, sizeof(a)/sizeof(int));
你也可以使用传递枚举作为常量的分母枚举可能是这样的
enum dataType {
INT = 2,
fLOAT = 4,
DOUBLE = 8
}type;
这有助于将代码部署到不同的环境,例如从dos到Windows等,但我想在orignal片段中也可以这样。但枚举方法会增加我猜的性能。