C语言,关于求数组长度的问题!

int Length(int *arr){
int len=sizeof(arr)/sizeof(int);
return len;
}

main(){
int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("%d\n",sizeof(a)/sizeof(int)); //输出为10,正确
printf("%d\n",Length(a)); //输出为1,错误
}
//相同的操作,为什么会有不同的结果?
//请大家帮我详细解答一下,谢谢!

sizeof命令中,
一、如果参数是指针变量(无论什么类型的指针)其结果都是4
二、如果参数是是数组,会返回数组所占空间的大小,即:int a[n] ; sizeof(a)=n*sizeof(int) ;
三、如果参数是个变量类型,则会返回这个类型所占空间的大小。sizeof(char)=1 sizeof(int)=4 sizeof(double)=8 具体一个变量类型所占的空间大小与机器类型有关系,如32位机long占4字节,而64位机long占8字节。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-27
解答:第一,在main 函数中,a为一维数组,是个常指针,此时sizeof(a)就能够计算出来4*10 = 40,sizeof(int)是为4的
第二,在int Length中,你将a作为一个地址传入该函数里,这个arr只是一个指针变量而已,它的大小为4个字节,使用sizeof(arr)时只能得到4。
这个sizeof比较奇怪,你在主函数里定义 char *b = "helloworld";
如果使用sizeof(b)的话,也是算出来4,懂了吗,嘿嘿
第2个回答  2012-09-27
sizeof(arr) 其中arr是指向数组a 的指针。指针占四个字节, int也是占四个字节。

如果想结果一样
可以如下处理:

char str[100];
strcpy(str, arr);
len=strlen(str);本回答被网友采纳
第3个回答  2012-09-27
你的Length(int *arr)函数,传过来的arr,是数组的指针,你用 sizeof(arr)实际上就是一个指针的占用的空间大小 ,32位机器上是4位,而int 也是占4位,所以就是 1 啦。所以一般在传数组的时候都要传数组的长度过去
第4个回答  2012-09-27
Length中的sizeof(arr)是一个整形的指针的长度,也就是一个整形的长度,所以得出的就是1啊
相似回答