下面程序中数组的长度ar
在 main 中是正确的,但在 temp
中是正确的它显示了指向 ar
的指针的长度在我的计算机上是 2 (以 sizeof(int)
为单位)。
#include <stdio.h>
void temp(int ar[]) // this could also be declared as `int *ar`
{
printf("%d\n", (int) sizeof(ar)/sizeof(int));
}
int main(void)
{
int ar[]={1,2,3};
printf("%d\n", (int) sizeof(ar)/sizeof(int));
temp(ar);
return 0;
}
我想知道应该如何定义该函数,以便在函数中正确读取数组的长度。
最佳答案
没有“内置”方法来确定函数内部的长度。无论您传递arr
,sizeof(arr)
都将始终返回指针大小。因此,最好的方法是将元素数量作为单独的参数传递。或者,您可以使用特殊值,例如 0
或 -1
来指示结束(就像字符串中的 \0
一样,它们只是 char[]
)。
但当然,“逻辑”数组大小是 sizeof(arr)/sizeof(int) - 1
关于c - 查找函数内数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58358617/