c - sizeof() 如何通过引用参数传递

标签 c arrays function pointers

我将一个数组传递给函数并尝试查找该数组的长度。但结果却出乎意料。有人可以解释一下吗?

int main()
{
     int array[10]={0};
     func(array);
     return 0;
}
void func(int arr[])
{
    printf("length of an array is %d ",(sizeof(arr)/sizeof(arr[0]));
}

给出答案2。 当我在 main 函数中尝试相同的操作时,它工作正常(答案是 10)。 //在linux中使用gcc编译器

最佳答案

在我看来,这个结果是因为 sizeof(arr) == 8 (PC 上指针的大小)和 sizeof(arr[0]) == 4 因为它是一个整数,因此 8/4==2

此声明:void func(int arr[]) 告诉函数期望指向 int 的指针作为参数。

我不清楚是否可以通过引用计算数组的size。接受数组引用作为参数的 C 函数总是倾向于接收它们的长度作为参数。

main() 函数的区别在于 main 内部的 array 变量的类型为 int[10],因此 sizeof 能够获取其以字节为单位的长度。在 func 中,arr 的类型为 int*,因此 sizeof 仅给出指针的长度(以字节为单位)。

关于c - sizeof() 如何通过引用参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22247318/

相关文章:

c - C 中的基本枚举效率

c++ - OpenCL 仅读取/写入缓冲内存的 1/4,有时会崩溃

c++ - 在 C++/C 中通配,在 Windows 上

java - Java中字节流转字符流

javascript - 从数组中删除多个元素

javascript - 单击一个元素并将其从数组中删除

javascript - 如何让我的 javascript 函数随机选择一个函数(幻灯片),执行它,然后重复?

algorithm - 在 int 中找到第 n 个 SET 位

c - 在串行链路上等待读取数据的通知

c++ - 我的函数不会向 C++ 中的局部变量返回值