今天调试了一个程序:如下:
完成程序,实现对数组的降序排序
#include
void sort( );
int main()
{
int array[]={45,56,76,234,1,34,23,2,3}; //数字任//意给出
sort( );
return 0;
}
void sort( )
{
____________________________________
| |
| |
|-----------------------------------------------------|
}
对这个程序,我开始感觉很简单,可是,在我实际实现的时候,却遇到了不少的问题,下面我一一到来!
首先,题目要求完成程序,显然,我们就只能在需要在划线的地方写代码,那就写吧,可接下来的问题,我就没招了,面对一个数组长度的问题,如何在sort 函数中求的array数组的长度呢?
我查了c课本,问了同学,也就这么几种,一是,传递参数,也就是让sort(int nLen);二是,把array放到全局,这样哪个函数都可以访问;
其他的方法现在还没有想到,如果谁看到了,给我留个联系地址啊!谢谢了
我猜,这个题是再别人转copy的时候,copy错了。等等,这些都不管了,我把array 拿到全局去,继续我的程序;
接着,又出来问题了,因为我还要求这个数组的长度,于是,我这样写的
void sort(int tarray[])
{
int uInt= (sizeof(tarray))/(sizeof(int));
。
。
。
。
}
可是,令我不解的问题又出现了,在前提,全局数组
int array[] = {12,23,34,233,92,81,76,52,108,590};的条件下,
按理说,uInt 应该是10,可是,uInt = 1;
我不能不怀疑我自己的水平了!!
接着,我不得不做测试了。。。。
int main(int argc, char* argv[])
{
int array[] = {12,23,34,233,92,81,76,52,108,590};
printf("%d ",sizeof(array));
int uInt= (sizeof(array))/(sizeof(int));
printf("%d ", uInt);
return 0;
}
显示结果是,40 10,很正确啊!
而为什么在函数sort 中,就是不正确的呢???
如下:
void sort(int tarray[])
{
printf("%d ",sizeof(tarray));
printf("%d =",sizeof(tarray));
int uInt= (sizeof(tarray))/(sizeof(int));
printf("\n%d \n", uInt);
。。。。。。
}
最后,我不得不在 internet 上,查阅一番了。。。。
最后找到几条有价值的参考。
如下:
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
问题:
在c++中求一个数组的长度(比如整形), 我刚开始想这么做
int array1[5];
int count = sizeof(array1)/sizeof(int);
这样写是可以得出结果得, 但是如果我把这个数组传递给一个函数
void test(int array1[]){
int count = sizeof(array1)/sizeof(int);
}
在函数里面求得的值就是1, 也就是说在函数里面数组当作指针来处理了, 不知道这问题怎么解决, 有什么方法可以方便的求出数组的长度么
讨论:
无论何时,将数组作为参数传给函数,实际上只是把数组的地址传给函数
传递给自定义函数,需传递一个数组参数和数组大小参数。
不好算 因为数组不会重新完全拷贝副本传入 只会引如数据地址和类型 所以没有办法的
不通过参数传递, 没有别的办法 指针是不带有数组长度信息的
当然不管用,返回值和参数传递的语义是一样的,这两种情况下传递的都仅仅是一个指针,长度信息丢掉了。因此,必须有另一个参数指出数组的长度。
看到网上各位大侠的讨论,看来,我也没有招了,只能传递两个参数了。
阅读(5163) | 评论(0) | 转发(0) |