一行C代码的逻辑

时间:2011-01-07 06:42:09

标签: c

您能告诉我在this code第17行使用sizeof data / sizeof *data的逻辑吗?

...
unsigned char data[16];
...
size = fread(data, sizeof *data, sizeof data / sizeof *data, file);
...

由于

4 个答案:

答案 0 :(得分:5)

这是“数组中元素数量”的常见C语言。

由于数组decays to a pointer处于最轻微的挑衅,*data是数组的第一个元素,因此它将数组的总大小除以其第一个元素的大小,给出一个计数元素。

对于这种技术有任何可能的反对意见,无论是基于样式,还是它只适用于声明为数组的变量(不是作为指向第一个元素的指针传递的那些 - 它依赖于衰变到 - 指针尚未发生),或C ++代码中可能存在的破坏情况;也就是说,它在旧的C代码中仍然很常见。

答案 1 :(得分:2)

它将数组的总大小除以每个元素的类型大小。 它返回数组中元素的数量

答案 2 :(得分:0)

它为您提供了数组中元素的数量。因为它是一个编译时值而不是运行时值,它实际上并不评估sizeof()内的任何内容,这很好,因为即使任何指针为空或超出界限它也能正常工作。

(有趣的事实:我在Windows C运行时,已经有一个_countof()宏就可以做到这一点,在Windows SDK中,ARRAYSIZE()宏也可以做同样的事情。)< / p>

答案 3 :(得分:0)

它只是计算数组中元素的数量 - 也就是说,整个数组的大小除以数组中第一个元素的大小给出了元素的数量(数组中的所有元素都是相同的大小)