作业帮 > 综合 > 作业

C语言中指向指针的指针什么时候用,最好说的详细一些,举个例子!山东

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/04 19:24:17
C语言中指向指针的指针什么时候用,最好说的详细一些,举个例子!山东
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*当然有必须使用二级指针才能解决的情况,如,某个函数的功能
是返回某个问题的计算结果,但是结果数据是不确定个数的值,所以
在调用此函数时不知道事先应分配多少空间来保存返回的数据,此时
的处理办法就是传递一个没有分配空间的指针的指针(地址)进去,
让函数自己根据计算的结果分配足够的空间来保存结果,并返回,
调用者使用了结果后,由调用者负责内存的释放,即,大家可能听说
过的"谁使用(调用)谁释放"之类的话,如下面的代码:*/
//返回不定结果个数的计算函数
//参数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;
getchar();
return 0;
}