一行C代码的逻辑

jes*_*sia 0 c

你能告诉我sizeof data / sizeof *data这个代码行17 中使用的逻辑吗?

...
unsigned char data[16];
...
size = fread(data, sizeof *data, sizeof data / sizeof *data, file);
...
Run Code Online (Sandbox Code Playgroud)

谢谢

Jef*_*tin 5

这是"数组中元素数量"的常见C语言.

由于数组在最轻微的激发时衰减为指针*data,因此是数组的第一个元素,因此它将数组的总大小除以其第一个元素的大小,从而给出元素的计数.

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