我有一个 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
};
无论您使用什么方法,您都需要了解,通过参数传递时,函数通常知道数组大小。因此,请记录该约定。您甚至可以有一个(糟糕的)约定,即所有数组都有一些全局变量作为其维度。
对于堆分配的内存区域,标准为您提供了 malloc
、calloc
等来获取此类新区域,但无法查询其分配的大小。一些 C 库具有非标准扩展来查询(但我不建议使用它们)。
最近C++11 (与C语言不同)您可能会对 std::vector 感兴趣和 std::array模板容器。
关于c - C中如何确定数组元素的个数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19198243/