您能告诉我在this code第17行使用sizeof data / sizeof *data
的逻辑吗?
...
unsigned char data[16];
...
size = fread(data, sizeof *data, sizeof data / sizeof *data, file);
...
由于
答案 0 :(得分:5)
这是“数组中元素数量”的常见C语言。
由于数组decays to a pointer处于最轻微的挑衅,*data
是数组的第一个元素,因此它将数组的总大小除以其第一个元素的大小,给出一个计数元素。
对于这种技术有任何可能的反对意见,无论是基于样式,还是它只适用于声明为数组的变量(不是作为指向第一个元素的指针传递的那些 - 它依赖于衰变到 - 指针尚未发生),或C ++代码中可能存在的破坏情况;也就是说,它在旧的C代码中仍然很常见。
答案 1 :(得分:2)
它将数组的总大小除以每个元素的类型大小。 它返回数组中元素的数量
答案 2 :(得分:0)
它为您提供了数组中元素的数量。因为它是一个编译时值而不是运行时值,它实际上并不评估sizeof()
内的任何内容,这很好,因为即使任何指针为空或超出界限它也能正常工作。
(有趣的事实:我在Windows C运行时,已经有一个_countof()
宏就可以做到这一点,在Windows SDK中,ARRAYSIZE()
宏也可以做同样的事情。)< / p>
答案 3 :(得分:0)
它只是计算数组中元素的数量 - 也就是说,整个数组的大小除以数组中第一个元素的大小给出了元素的数量(数组中的所有元素都是相同的大小)