C获取数组长度函数

时间:2019-06-15 14:18:25

标签: 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

1 个答案:

答案 0 :(得分:4)

这是因为在许多情况下,数组会衰减指向指针,包括将它们传递给函数。从函数内部检索传递数组的大小是不可能的。如果要让函数知道大小,则需要以某种方式分别传递它。许多标准库函数都使用这种方法。

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

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

旁注:sizeof(char)总是-根据定义-等于1,因此写起来毫无意义。尤其是如果您要使用它进行乘法或除法。