c - C中如何确定数组元素的个数?

标签 c arrays

我有一个 C 函数(我使用 gcc 4.8.0),它接收一个数组作为其参数。有没有一种方法可以准确确定数组中元素的数量,而无需传递额外的参数 array_count?

最佳答案

通常无法确定作为参数传递的数组元素的数量。

当您在 C 中将数组作为参数传递时,您仅传递指向该数组的指针,即指向保存该数组的内存区域的第一个元素(索引为 0)的指针。

程序员常常习惯将数组的大小作为另一个参数传递。例如,标准qsort(3)库函数期望数组中要排序的元素数量作为其第二个 nmemb 参数。

或者,您也可以使用 flexible array members ,例如传递(在 C99 中,而不是在早期的 C 标准中)结构的地址,例如

struct my_flexarray_st {
   int size; // allocated size
   int len;  // used length, should be less than size
   double arr[]; /// only len numbers are meaningful
};

无论您使用什么方法,您都需要了解,通过参数传递时,函数通常知道数组大小。因此,请记录该约定。您甚至可以有一个(糟糕的)约定,即所有数组都有一些全局变量作为其维度。

对于堆分配的内存区域,标准为您提供了 malloccalloc 等来获取此类新区域,但无法查询其分配的大小。一些 C 库具有非标准扩展来查询(但我不建议使用它们)。

最近C++11 (与C语言不同)您可能会对 std::vector 感兴趣和 std::array模板容器。

关于c - C中如何确定数组元素的个数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19198243/

相关文章:

java - 打印 Java 数组的最简单方法是什么?

javascript - 在 JavaScript 中按任意列表对对象数组进行排序

javascript - 如何在javascript中执行 "flat push"?

c++ - 包含库是行不通的

改变C中cmd窗口的背景颜色?

c - 通过信号量访问共享内存

C编程-递归填充数组

C - 从函数返回不同的值类型

javascript - 为什么我的 reduce 累加器会重置?

javascript - 重置关联数组的值