当前位置: 代码迷 >> C语言 >> 求助:关于数组长度
  详细解决方案

求助:关于数组长度

热度:273   发布时间:2006-07-28 15:50:09.0
求助:关于数组长度

#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的长度,该用什么语句?
谢谢!!

搜索更多相关的解决方案: 数组  长度  

----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------
那如果我想在函数体中
求数组的长度,该如何
----------------解决方案--------------------------------------------------------
以下是引用cordier在2006-7-28 16:28:51的发言:
那如果我想在函数体中
求数组的长度,该如何

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

以下是引用lj_860603在2006-7-28 17:48:55的发言:


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

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


----------------解决方案--------------------------------------------------------
以下是引用lj_860603在2006-7-28 16:26:57的发言:
n=sizeof(aa)/sizeof(aa[0]); 这句在fun函数里是错误的!如此而已。

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

因为 是一个 int /int


----------------解决方案--------------------------------------------------------
以下是引用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.


----------------解决方案--------------------------------------------------------
我又想了想觉得有点问题,就是32位的编译器int的长度是4,int型的指针长度也是4,但是16位的编译器不一定都是这样规定的啊。所以,这个可能还和系统和编译器有关。总之这种错误应该避免的。
----------------解决方案--------------------------------------------------------

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

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


----------------解决方案--------------------------------------------------------
  相关解决方案