如何求数组元素个数
定义这样一个数组: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)就是求的指针的大小了,而不是数组的大小了,所以得不到数组个数。
请问这是怎么回事呢? 展开
在main函数中利用 sizeof(a)/sizeof(int),这里sizeof(a)计算出了数组 a 所占的大小,能够得到这个数组的元素个数。
但是我在自定义函数把数组 a 传给该函数,用
sizeof(a)/sizeof(int),这里的sizeof(a)就是求的指针的大小了,而不是数组的大小了,所以得不到数组个数。
请问这是怎么回事呢? 展开
5个回答
展开全部
数组的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求出数组长度,然后再将所求出长度传入函数内部。
数组的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求出数组长度,然后再将所求出长度传入函数内部。
展开全部
函数参数里的数组已经退化了,没可能只从参数里求出数组大小的,只能再通过参数传递
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你直接用strlen(a)不就行了吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
传递之后应该不会求出来吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
话说直接a.length不就得了吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |