可能的重复:
C 编程语言中数组的大小?
我已经为此工作了很长时间,但似乎无法理解为什么会发生这种情况。
void fun(char []);
void fun(char a[])
{
printf("Size is %d\n",sizeof(a));
}
int main ()
{
char arr[10] = { 0 };
printf("Size is %d\n",sizeof(arr));
fun(arr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么是输出:
大小为 10
大小为 4
这是因为arrays当传入的函数会衰减为函数中的指针。
sizeofinfun()返回指针的大小a。阅读有关数组和指针的信息。
ainfun()实际上是一个按值复制的指针。
您应该将数组的大小作为单独的参数传递。
你应该这样试试:
#include <stdio.h>
void fun(char []);
void fun(char a[], int n)
{
// printf("Size is %d\n",sizeof(arr));
printf("Size is %d\n",n);
}
int main ()
{
char arr[10] = { 0 };
const int truesize = sizeof(arr)/sizeof(arr[0]); // try to understand this statement what it does - sizeof returns size in bytes
printf("Size is %d\n",truesize);
fun(arr,truesize); // This is how you should call fun
return 0;
}
Run Code Online (Sandbox Code Playgroud)