#define ArrayLength(x)(sizeof(x)/ sizeof(*(x)))是什么意思?
这条线究竟意味着什么?
很清楚定义是什么,但我不明白为什么在分母处传递x的指针:
#define ArrayLength(x) (sizeof(x)/sizeof(*(x)))
谢谢
分母
sizeof(*(x))
是数组中第一个元素的长度,以字节为单位。 变量x
是一个数组类型,它衰减到一个指针,指向数组的开头。 星号( *
)是解除引用运算符 ,因此*(x)
表示“ x
指向的数据” 。
分子
sizeof(x)
将sizeof
运算符应用于数组类型 。 这给出了整个数组的长度,以字节为单位。
宏也可以写成
#define ArrayLength(x) (sizeof(x)/sizeof(x[0]))
这可能更容易阅读。
该指针获取数组中的第一个对象。 如果我这样写它是否更清楚:
sizeof(entireArray) / sizeof(firstObjectInArray)
事实certificate是这样的
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片段中也可以这样。 但是enum方法会增加我猜的性能。