为什么它给出错误的数组大小

Exp*_*ice 1 c

可能的重复:
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

Fre*_*Foo 5

第一个sizeof报告指针的大小,第二个报告数组的大小。

用数组语法 ( void fun(char []))声明的参数实际上是一个指针参数。这[]只是语法糖。


Sad*_*que 5

这是因为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)