Chinaunix首页 | 论坛 | 博客
  • 博客访问: 225116
  • 博文数量: 53
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 507
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-22 13:38
文章分类

全部博文(53)

文章存档

2009年(1)

2008年(52)

我的朋友

分类:

2008-09-16 15:48:03

今天调试了一个程序:如下:
完成程序,实现对数组的降序排序
#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) |
给主人留下些什么吧!~~