gpt4 book ai didi

c - C 中的 array_length

转载 作者:太空狗 更新时间:2023-10-29 16:45:29 25 4
gpt4 key购买 nike

我这样写了一个 array_length 函数:

int array_length(int a[]){
return sizeof(a)/sizeof(int);
}

但是当我这样做时它返回 2

unsigned int len = array_length(arr);
printf ("%i" , len);

我在哪里

int arr[] = {3,4,5,6,1,7,2};
int * parr = arr;

但当我这样做的时候

int k = sizeof(arr)/sizeof(int);
printf("%i", k);

在主函数中,它返回 7。

编写 array_length 函数的正确方法是什么以及如何使用它?

最佳答案

在 C 中计算数组长度充其量是有问题的。

上面代码的问题是,当您这样做时:

int array_length(int a[]){ 
return sizeof(a)/sizeof(int);
}

您实际上只是将指针作为“a”传递,所以 sizeof(a)sizeof(int*)。如果您使用的是 64 位系统,则函数内部的 sizeof(a)/sizeof(int) 总是会得到 2,因为指针将为 64 位。

您可以(可能)将其作为宏而不是函数来执行此操作,但是它有其自身的问题...(它完全内联了这一点,因此您获得与 int k =... 相同的行为 block ,虽然。)

关于c - C 中的 array_length,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2089071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com