C 获取数组长度函数

标签 c arrays

制作一个 C 数组大小函数。这通常是 C 数组大小的标准约定,并且它在创建数组的函数中工作,但当放入另一个函数中时它似乎不起作用。这是为什么?

int size(char a[]) {
    return (int) (size_t) (sizeof(a)/ sizeof(char));
}

void test() {
    char a[] = {'a','b','c','d'};
    printf("%d\n", size(a));
    printf("%d\n", (int) (size_t) (sizeof(a)/ sizeof(char)));
}

int main() {
    test();
    return 0;
}

结果:

8       -> INCORRECT
4       -> CORRECT

最佳答案

这是因为数组在许多情况下会衰减为指针,包括将它们传递给函数。无法从函数内部检索传递的数组的大小。如果你想让函数知道大小,那么你需要以某种方式单独传递它。许多标准库函数都使用这种方法。

如果您只是在寻找一种快速获取数组大小的方法,请使用此宏:

#define SIZE(x) (sizeof(x)/sizeof(x[0]))

旁注:sizeof(char) 根据定义,始终等于 1,因此编写它毫无意义。特别是当您要与之相乘或除法时。

关于C 获取数组长度函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56611177/

相关文章:

c - 是什么导致此 for 循环中的内存泄漏?

c - 堆栈上的本地存储

c++ - "make"是否知道如何在子目录中搜索包含文件?

c - c中的二进制整数到整数数组

python - 为什么我们可以为 NumPy 数组的形状传递一个列表?形状不是必须是整数或整数元组吗?

c - 带参数的内联汇编重新排序代码

python - 错误 LNK2001 : unresolved external symbol PyInit_

c# - 如何在 C# 中对二维(矩形)数组进行排序?

javascript - API 响应是数组的数组。第一个数组是对象键值对中的键

javascript - 使用 set.has 的过滤器无法按预期工作