#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方法会增加我猜的性能。