C语言,关于求数组长度的问题!
intLength(int*arr){intlen=sizeof(arr)/sizeof(int);returnlen;}main(){inta[10]={1,2,3,4...
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,错误
}
//相同的操作,为什么会有不同的结果?
//请大家帮我详细解答一下,谢谢! 展开
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,错误
}
//相同的操作,为什么会有不同的结果?
//请大家帮我详细解答一下,谢谢! 展开
6个回答
展开全部
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字节。
一、如果参数是指针变量(无论什么类型的指针)其结果都是4
二、如果参数是是数组,会返回数组所占空间的大小,即:int a[n] ; sizeof(a)=n*sizeof(int) ;
三、如果参数是个变量类型,则会返回这个类型所占空间的大小。sizeof(char)=1 sizeof(int)=4 sizeof(double)=8 具体一个变量类型所占的空间大小与机器类型有关系,如32位机long占4字节,而64位机long占8字节。
展开全部
解答:第一,在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,懂了吗,嘿嘿
第二,在int Length中,你将a作为一个地址传入该函数里,这个arr只是一个指针变量而已,它的大小为4个字节,使用sizeof(arr)时只能得到4。
这个sizeof比较奇怪,你在主函数里定义 char *b = "helloworld";
如果使用sizeof(b)的话,也是算出来4,懂了吗,嘿嘿
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-09-27 · 知道合伙人软件行家
关注
展开全部
sizeof(arr) 其中arr是指向数组a 的指针。指针占四个字节, int也是占四个字节。
如果想结果一样
可以如下处理:
char str[100];
strcpy(str, arr);
len=strlen(str);
如果想结果一样
可以如下处理:
char str[100];
strcpy(str, arr);
len=strlen(str);
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的Length(int *arr)函数,传过来的arr,是数组的指针,你用 sizeof(arr)实际上就是一个指针的占用的空间大小 ,32位机器上是4位,而int 也是占4位,所以就是 1 啦。所以一般在传数组的时候都要传数组的长度过去
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Length中的sizeof(arr)是一个整形的指针的长度,也就是一个整形的长度,所以得出的就是1啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询