在 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/

10-12 16:10