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

时间:2011-03-30 10:50:22

标签: c

  

可能重复:
  Sizeof an array in the C programming language?

我一直在研究这个问题,但似乎无法理解为什么会发生这种情况。

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

3 个答案:

答案 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 [])是指针的大小。