2011-03-30 64 views
1

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

+1

确切的重复:http://stackoverflow.com/questions/1975128/sizeof-an-array-in-the-c-programming-language – razlebe 2011-03-30 10:51:55

回答

2

你还期望什么?

它的因为arrays当在函数中传递时被腐蚀成函数中的指针。

sizeof in fun()返回指针a的大小。阅读关于Arrays and Pointers

a in 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; 
} 
+0

这是为什么 - sizeof(arr)/ sizeof(arr [0] ) - 需要? – 2011-03-30 10:54:09

+0

制作“int”类型的数组,并查看代码的大小。 – Sadique 2011-03-30 10:54:50

4

第一sizeof报告一个指针的大小,阵列的所述第二尺寸。

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

0

的sizeof是一个操作符,它计算它的值在编译时。 sizeof(char [])是指针的大小。

相关问题