Chinaunix首页 | 论坛 | 博客
  • 博客访问: 772417
  • 博文数量: 455
  • 博客积分: 9776
  • 博客等级: 中将
  • 技术积分: 5870
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-19 23:23
文章分类

全部博文(455)

文章存档

2011年(455)

分类: C/C++

2011-04-20 22:39:27

#include

#include

#include

/*当然有必须使用二级指针才能解决的情况,,某个函数的功能

是返回某个问题的计算结果,但是结果数据是不确定个数的值,所以

在调用此函数时不知道事先应分配多少空间来保存返回的数据,此时

的处理办法就是传递一个没有分配空间的指针的指针(地址)进去,

让函数自己根据计算的结果分配足够的空间来保存结果,并返回,

调用者使用了结果后,由调用者负责内存的释放,,大家可能听说

过的"谁使用(调用)谁释放"之类的话,如下面的代码:*/

 

//返回不定结果个数的计算函数

//参数int **pResult--为保存返回数据的指针的指针

//参数int &count--为保存返回的结果个数

void Compute2(int **pResult,int &count)

{

 //使用随机数来模拟计算结果数的个数

 srand(time(NULL));

 count = rand()%10;//控制个数在10个以内

 

 *pResult = new int[count];

 for ( int i = 0 ; i < count ; i++ )

 {

  (*pResult)[i] = rand();//给结果随即赋值

 }

}

 

//返回不定结果个数的计算函数(此函数不能返回数据)

//参数int *pResult--为保存返回数据的指针

//参数int &count--为保存返回的结果个数

void Compute1(int *pResult,int &count)

{

 //使用随机数来模拟计算结果数的个数

 srand(time(NULL));

 count = rand()%10;//控制个数在10个以内

 

 pResult = new int[count];

 for ( int i = 0 ; i < count ; i++ )

 {

  pResult[i] = rand();//给结果随即赋值

 }

}

 

int main(void)

{

 int *pResult = NULL;//待获取结果的指针

 int count = 0;//返回结果的个数

 

 ////pResult为指针,第二个参数使用引用传递,使用这个函数时,在函数内部分配的内存的指针并没有返回到主函数中

 //Compute1(pResult,count);

 ////输出结果

 //for ( int i = 0 ; i < count ; i++ )

 //{

 // printf(" %d 个结果为 : %d\n",pResult[i]);//如果使用这种调用方法,可以看到,执行了Compute1()函数后,pResult的值还是为NULL

 //}

 //delete [] pResult;

 //pResult = NULL;

 

 //&pResult为指针的地址(即指针的指针),第二个参数使用引用传递

 Compute2(&pResult,count);

 //输出结果

 for ( int i = 0 ; i < count ; i++ )

 {

  printf(" %d 个结果为 : %d\n",i,pResult[i]);

 }

 

 delete [] pResult;

 pResult = NULL;

 

阅读(628) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~