在 java、java 脚本和其他语言中,array.length 函数可用于了解循环和其他需要的数组长度。在 C 编程中我正在使用
sizeof()
用于通过以下过程确定数组大小或数组长度的运算符:
int array [] ={12, 3, 4, 6};
for (int i = 0; i < (sizeof(array)/sizeof(int)); i++) {
// do sometings
}
我想知道是
sizeof(array)/sizeof(int)
查找数组大小是否有效?
或者,如果其他有效的方法可用,请建议我。
最佳答案
它非常有效,因为它是一个产生编译时常量的构造(C99 VLA 除外,见下文)。您可能想要使用:
sizeof(array)/sizeof(array[0])
相反,您可以将它与 int 类型以外的类型一起使用。也许将它包装在一个宏中(当然,使用宏时所有关于谨慎的常见警告都适用)。
更新:对于我上面的原始答案,我没有考虑 C99 中的 VLA,其中:
VLA 数组元素的数量可能只能在运行时确定(并且评估本身会产生副作用),因此对于 VLA 而言,它不是纯粹的编译时构造。在大多数格式良好的情况下,VLA 的代码级行为实际上是相同的。例如:
#include <stdio.h>
#define countof_array(arr) (sizeof(arr)/sizeof(arr[0]))
int vlaSize(void)
{
return 8;
}
int main(void)
{
int fixed_array[9] = { 1,2,3,4,5,6,7,8,9 };
int vla_array[vlaSize()];
printf("Fixed array: size = %zu bytes, count = %zu elements\n",
sizeof(fixed_array), countof_array(fixed_array));
printf("VLA array: size = %zu bytes, count = %zu elements\n",
sizeof(vla_array), countof_array(vla_array));
return 0;
}
结果:
$ gcc -Wall -std=c99 so-misc.c
$ ./a.out
Fixed array: size = 36 bytes, count = 9 elements
VLA array: size = 32 bytes, count = 8 elements
在进一步编辑,打击这一部分:
因为在想了很多之后,我不确定这是否属实。在 separate question 中询问这个。
在任何情况下,它仍然非常有效,因为首先要创建 VLA,编译器必须弄清楚 VLA 将占用多少空间。因此,即使不是 VLA 的编译时常量,它仍然是确定数组大小的最有效方法。
关于c - 需要建议以有效的方式确定 C 中的数组大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28038156/