如何求数组元素个数

定义这样一个数组:inta[]={1,2,3,4,5}在main函数中利用sizeof(a)/sizeof(int),这里sizeof(a)计算出了数组a所占的大小,能够... 定义这样一个数组: int a[]={1,2,3,4,5}
在main函数中利用 sizeof(a)/sizeof(int),这里sizeof(a)计算出了数组 a 所占的大小,能够得到这个数组的元素个数。
但是我在自定义函数把数组 a 传给该函数,用
sizeof(a)/sizeof(int),这里的sizeof(a)就是求的指针的大小了,而不是数组的大小了,所以得不到数组个数。
请问这是怎么回事呢?
展开
 我来答
music547up
2010-04-27
知道答主
回答量:10
采纳率:0%
帮助的人:0
展开全部
数组的sizeof:

数组的sizeof值等于数组所占用的内存字节数,如:
char a1[] = "abc";
int a2[3];
sizeof( a1 ); // 结果为4,字符 末尾还存在一个NULL终止符
sizeof( a2 ); // 结果为3*4=12(依赖于int)
刚开始时把sizeof当作了求数组元素的个数,现在,你应该知道这是不对的,那么应该怎么求数组元素的个数呢Easy,通常有下面两种写法:
int c1 = sizeof( a1 ) / sizeof( int ); // 总长度/单个元素的长度
int c2 = sizeof( a1 ) / sizeof( a1[0] ); // 总长度/第一个元素的长度
写到这里,提一问,下面的c3,c4值应该是多少呢
void foo3(char a3[3])
{
int c3 = sizeof( a3 ); // c3 ==
}
void foo4(char a4[])
{
int c4 = sizeof( a4 ); // c4 ==
}
也许当你试图回答c4的值时已经意识到c3答错了,是的,c3!=3。这里函数参数a3已不再是数组类型,而是蜕变成指针,相当于char* a3,为什么仔细想想就不难明白,我们调用函数foo1时,程序会在栈上分配一个大小为3的数组吗不会!数组是“传址”的,调用者只需将实参的地址传递过去,所以a3自然为指针类型(char*),c3的值也就为4。

由此可知,lz的情况的解决办法应该是先在函数外用sizeof求出数组长度,然后再将所求出长度传入函数内部。
百度网友b745e17d0f
推荐于2017-11-23 · TA获得超过1087个赞
知道小有建树答主
回答量:728
采纳率:0%
帮助的人:756万
展开全部
函数参数里的数组已经退化了,没可能只从参数里求出数组大小的,只能再通过参数传递
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sunjun0622
2010-04-27 · 超过18用户采纳过TA的回答
知道答主
回答量:112
采纳率:0%
帮助的人:60.5万
展开全部
你直接用strlen(a)不就行了吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
威哥看好剧
2010-04-26 · 超过19用户采纳过TA的回答
知道答主
回答量:116
采纳率:0%
帮助的人:73.6万
展开全部
传递之后应该不会求出来吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乁Freedom
2010-04-26 · TA获得超过2128个赞
知道小有建树答主
回答量:1580
采纳率:0%
帮助的人:1409万
展开全部
话说直接a.length不就得了吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式