指针变量作参数怎样才能带回变量的值?
我在写一个作业题,要求用递归程序求一个数组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);
}