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,错误
}
//相同的操作,为什么会有不同的结果?
//请大家帮我详细解答一下,谢谢!
展开
 我来答
kaixingui2012
推荐于2017-09-18 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6447万
展开全部
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字节。
马宏雨轩
2012-09-27
知道答主
回答量:13
采纳率:0%
帮助的人:16.6万
展开全部
解答:第一,在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,懂了吗,嘿嘿
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lgao622
2012-09-27 · 知道合伙人软件行家
lgao622
知道合伙人软件行家
采纳数:1137 获赞数:6550
毕业于武汉工程大学邮电与信息工程学院通信专业,软件行业,4年工作经验。

向TA提问 私信TA
展开全部
sizeof(arr) 其中arr是指向数组a 的指针。指针占四个字节, int也是占四个字节。

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

char str[100];
strcpy(str, arr);
len=strlen(str);
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
love_zhai
2012-09-27 · TA获得超过111个赞
知道小有建树答主
回答量:157
采纳率:0%
帮助的人:101万
展开全部
你的Length(int *arr)函数,传过来的arr,是数组的指针,你用 sizeof(arr)实际上就是一个指针的占用的空间大小 ,32位机器上是4位,而int 也是占4位,所以就是 1 啦。所以一般在传数组的时候都要传数组的长度过去
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
523914437
2012-09-27 · 超过20用户采纳过TA的回答
知道答主
回答量:98
采纳率:0%
帮助的人:72.9万
展开全部
Length中的sizeof(arr)是一个整形的指针的长度,也就是一个整形的长度,所以得出的就是1啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式