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