This question already has answers here:
Closed 5 years ago.
Why does a C-Array have a wrong sizeof() value when it's passed to a function? [duplicate]
(6个答案)
#include<stdio.h>
void length(int arr[])
{
 int len=sizeof(arr)/sizeof(arr[0]);
 printf("%d",len);
}

main()
{
 int arr[]={4,5,6,3,21,9,3,8};
 length(arr);
}

在这段代码中,答案总是2。我不明白为什么。有必要一直寄这个尺寸的吗。

最佳答案

在C语言中,不能将整个数组传递给被调用的函数,因为在这种情况下可能需要很大的堆栈空间,因为据我所知,传递给函数的参数存储在堆栈中。
因此,当您试图将数组传递给函数时,数组名会衰减为指向数组第一个元素的指针,因为数组存储在连续的内存位置,因此您只需要知道第一个元素的地址。
正如@John Zwinck已经指出的,您总是以2的形式获得输出的确切原因可能是您在一个64-bit系统上。
在64位系统/编译器上,指针的大小是8 bytes(这只是因为系统可以访问2^64地址,因此需要8个字节来存储它们),而int的大小是4 bytes

10-06 10:32
查看更多