| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1735 人关注过本帖
标题:求助:关于数组长度
只看楼主 加入收藏
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
结帖率:60%
收藏
 问题点数:0 回复次数:17 
求助:关于数组长度

#include <stdio.h>
main()
{
int n;
int aa[5]={1,2,3,4,5};
void fun(int aa[]);
n=sizeof(aa)/sizeof(aa[0]); /*数组的元素个数*/
printf("in main function:n=%d\n",n);

fun(aa);
getch();
}


void fun(int aa[])
{
int n;
n=sizeof(aa)/sizeof(aa[0]); /*数组的元素个数*/
printf("in fun function:n=%d\n",n);
}

因为以前有用类似的做法做过。
但是今天在函数体中运行,却不行,而在主函数中可以求得数组的长度
为什么?
是不是因为fun函数中,aa仅仅是一个指针,所以sizeof(aa)和sizeof(aa[0])是一样的,都等于2


如果我要在函数fun中计算出aa的长度,该用什么语句?
谢谢!!

搜索更多相关主题的帖子: 数组 长度 
2006-07-28 15:50
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

当把int aa[]={1,2,3,4,5};变成全局变量时,fun()参数为void的时候就没错误。
所以我猜测应该是函数在参数传递时出现了问题,不过具体什么原因我也不太清楚.


对不礼貌的女生收钱......
2006-07-28 16:01
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 

在C中,函数参数 aa[] 其实就是个指针,在fun函数里你把aa[]当做数组看,但编译器根本不知道这个数组的长度,所以
n=sizeof(aa)/sizeof(aa[0]); 这句在fun函数里是错误的!如此而已。


我的原则很简单:不做不喜欢的事!
2006-07-28 16:26
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 
那如果我想在函数体中
求数组的长度,该如何

2006-07-28 16:28
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
以下是引用cordier在2006-7-28 16:28:51的发言:
那如果我想在函数体中
求数组的长度,该如何

其实根本不用求,把数组长度作为一个参数传递就可以了。
假如一定要在函数中求,那么就不能用n=sizeof(aa)/sizeof(aa[0]); 了,就这样吧:
for (int len=0; *aa; aa++, ++len); //这样循环结束后len的值就是数组长度了


我的原则很简单:不做不喜欢的事!
2006-07-28 17:48
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
以下是引用lj_860603在2006-7-28 17:48:55的发言:


for (int len=0; *aa; aa++, ++len); //这样循环结束后len的值就是数组长度了

没看懂为什么这样就是数组的长度了


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-28 19:19
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
以下是引用lj_860603在2006-7-28 16:26:57的发言:
n=sizeof(aa)/sizeof(aa[0]); 这句在fun函数里是错误的!如此而已。

这句没有错误..只不过算出的结果应该是1而已

因为 是一个 int /int


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-28 19:23
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
以下是引用SunShining在2006-7-28 19:23:34的发言:

这句没有错误..只不过算出的结果应该是1而已

因为 是一个 int /int

哦对,应该是1啊。aa是个指针,所以sizeof(aa) == 4; aa[0]是个int型的数组元素,所以sizeof(aa[0]) == 4
sizeof(aa)/sizeof(aa[0]) == 1

谢谢你啊,SUN.


我的原则很简单:不做不喜欢的事!
2006-07-28 22:27
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
我又想了想觉得有点问题,就是32位的编译器int的长度是4,int型的指针长度也是4,但是16位的编译器不一定都是这样规定的啊。所以,这个可能还和系统和编译器有关。总之这种错误应该避免的。

我的原则很简单:不做不喜欢的事!
2006-07-28 22:33
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 

这个吗..我记得.分配指针类型的时候是按int型分配的

刚才试了一下..在TC下指针类型为2字节.我应该没记错吧


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-28 22:49
快速回复:求助:关于数组长度
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015398 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved