我一直在研究这个问题,但似乎无法理解为什么会发生这种情况。
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;
}
为什么输出:
尺寸为10
尺寸为4
答案 0 :(得分:4)
第一个sizeof
报告指针的大小,第二个是数组的大小。
使用数组语法(void fun(char [])
)声明的参数实际上是指针参数。 []
只是语法糖。
答案 1 :(得分:2)
您还期待什么?
因为arrays
在函数中传递时会被衰减为函数中的指针。
sizeof
中的 fun()
返回指针a
的大小。阅读Arrays and Pointers。
a
中的 fun()
实际上是按值复制的指针。
您应该将数组的大小作为单独的参数传递。
你应该这样试试:
#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;
}
答案 2 :(得分:0)
sizeof是一个运算符,它在编译时计算它的值。 sizeof(char [])是指针的大小。