#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函数里是错误的!如此而已。
----------------解决方案--------------------------------------------------------
那如果我想在函数体中
求数组的长度,该如何
----------------解决方案--------------------------------------------------------
那如果我想在函数体中
求数组的长度,该如何
其实根本不用求,把数组长度作为一个参数传递就可以了。
假如一定要在函数中求,那么就不能用n=sizeof(aa)/sizeof(aa[0]); 了,就这样吧:
for (int len=0; *aa; aa++, ++len); //这样循环结束后len的值就是数组长度了
----------------解决方案--------------------------------------------------------
for (int len=0; *aa; aa++, ++len); //这样循环结束后len的值就是数组长度了
没看懂为什么这样就是数组的长度了
----------------解决方案--------------------------------------------------------
n=sizeof(aa)/sizeof(aa[0]); 这句在fun函数里是错误的!如此而已。
这句没有错误..只不过算出的结果应该是1而已
因为 是一个 int /int
----------------解决方案--------------------------------------------------------
这句没有错误..只不过算出的结果应该是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字节.我应该没记错吧
----------------解决方案--------------------------------------------------------