首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

指针变量作参数怎样才能带回变量的值?该如何解决

2012-03-06 
指针变量作参数怎样才能带回变量的值?我在写一个作业题,要求用递归程序求一个数组a[N]的最大值和最小值,因

指针变量作参数怎样才能带回变量的值?
我在写一个作业题,要求用递归程序求一个数组a[N]的最大值和最小值,因为有两个变量的值要带回,所以我选择使用指针变量作为参数来带回最大值和最小值,但是很郁闷的是,总是出现问题.现在我想请教大家一下,帮忙分析一下究竟为什么带回值,或者是要做什么修改才能带回所需要的值,万分感激!!!
使用函数返回值的代码如下:
#include   "stdio.h "
int   getMax(int   a[],int   start,int   end){
int   mid;
int   max,leftMax,rightMax;
if   (end-start <=1){
if   (a[start]> =a[end])
max=a[start];
else
max=a[end];
}
else{
mid=(end+start)/2;
leftMax=getMax(a,start,mid);
rightMax=getMax(a,mid+1,end);
if   (leftMax> =rightMax)
max=leftMax;
else
max=rightMax;
}
return   max;
}
void   main(){
int   b[10]={9999,-12,5,98,125,-999,1999,2,6,9965};
int   v;
v=getMax(b,0,9);
printf( "get   Max   v=%d\n ",v);
}上述代码运行正常.

使用指针出问题的程序代码如下:
#include   "stdio.h "
void   getMaxMin(int   a[],int   start,int   end,int   *max,int   *min){
int   mid;
int   *pLeftMax,*pLeftMin,*pRightMax,*pRightMin;
if   (end-start <=1){
if   (a[start]> =a[end]){
max=&a[start];
min=&a[end];
}
else{
max=&a[end];
min=&a[start];
}
}
else{
mid=(end+start)/2;
getMaxMin(a,start,mid,pLeftMax,pLeftMin);
getMaxMin(a,mid+1,end,pRightMax,pRightMin);
if   (*pLeftMax> =*pRightMax)
*max=*pLeftMax;
else
*max=*pRightMax;
if   (*pLeftMin <=*pRightMin)
*min=*pLeftMin;
else
*min=*pRightMin;
}
}
void   main(){
int   b[10]={9999,-12,5,98,125,-999,1999,2,6,9965};
int   *pmax,*pmin;
pmax=NULL;
pmin=NULL;
getMaxMin(b,0,9,pmax,pmin);
printf( "get   Max   value=%d,min   value=%d\n ",*pmax,*pmin);
}
程序运行完出现*pmax与*pmin的返回值均为0,bn

[解决办法]
c语言的话使用指针的指针
void getMaxMin(int a[],int start,int end,int *max,int *min)

改为:

void getMaxMin(int a[],int start,int end,int **max,int **min)
程序中,
if (end-start <=1){
if (a[start]> =a[end]){
*max=&a[start];
*min=&a[end];
}
else{
*max=&a[end];
*min=&a[start];
}
}
改为
if (end-start <=1){
if (a[start]> =a[end]){
*max=&a[start];
*min=&a[end];
}
else{
*max=&a[end];
*min=&a[start];
}
}


[解决办法]
楼主,刚才我只看了你的函数声明,发现要用指针的引用来做。
你说不好用,我又仔细看了一下,发现你的函数体里面也有问题,
我给你改好了,VC6下运行正常。


void getMaxMin(int a[],int start,int end,int *&max,int *&min){ //改为指针的引用
int mid;
int *pLeftMax,*pLeftMin,*pRightMax,*pRightMin;
if (end-start <=1){
if (a[start]> =a[end]){
max=&a[start];
min=&a[end];
}
else{
max=&a[end];
min=&a[start];
}
}
else{
mid=(end+start)/2;
getMaxMin(a,start,mid,pLeftMax,pLeftMin);
getMaxMin(a,mid+1,end,pRightMax,pRightMin);
if (*pLeftMax> =*pRightMax)
max=pLeftMax; //1
else
max=pRightMax; //2
if (*pLeftMin <=*pRightMin)
min=pLeftMin; //3
else
min=pRightMin; //4
} //上面4处都改成指针的赋值,而不能用指针的指向互相赋值,因为max传进来时
} //是NULL,并没有空间存放值。 而且你上面的if语句里都是指针赋值的风格


//这里最好保持一致
void main(){
int b[10]={9999,-12,5,98,125,-999,1999,2,6,9965};
int *pmax,*pmin;
pmax=NULL;
pmin=NULL;
getMaxMin(b,0,9,pmax,pmin);
printf( "get Max value=%d,min value=%d\n ",*pmax,*pmin);
}

热点排行