函数返回两个及以上的值(引用 / 指针 / 全局变量)

引用 

#include<iostream>
using namespace std;
void extremum(const int a[],int n,int &max,int &min);
int main(){
    int max,min;
    int a[]={12,34,56,7,3,99,67,45,3,80};
    extremum(a,sizeof(a)/sizeof(a[0]),max,min);
    cout<<"max="<<max<<" min="<<min<<endl;
    return 0;
}
void extremum(const int a[],int n,int &max,int &min){
    max=min=a[0];
    for(int i=0;i<n;i++){
        if(max<a[i]) max=a[i];
        if(min>a[i]) min=a[i];
    }
}


指针-法一

#include<iostream>
using namespace std;
int main(){
    int *max,*min;  //这个方法不能用函数(反正我不会),(具体原因分析在下面)
                    //麻烦且没必要
    int a[]={12,34,56,7,3,99,67,45,3,80};
    max=&a[0];
    min=&a[0];
    for(int i=0;i<sizeof(a)/sizeof(a[0]);i++){
        if(*max<a[i]) max=&a[i];  //将max变为a[i]的别名
        if(*min>a[i]) min=&a[i];
    }
    cout<<"max="<<*max<<" min="<<*min<<endl;
    return 0;
}


/*****引用函数造成错误(无法输出)*****
#include<iostream>
void extremum(int a[],int n,int *max,int *min);
using namespace std;
int main(){
    int *max,*min;  
    int a[]={12,34,56,7,3,99,67,45,3,80};
    extremum(a,sizeof(a)/sizeof(a[0]),max,min);
    cout<<"max="<<*max<<" min="<<*min<<endl;  //无法输出
    return 0;
}
void extremum(int a[],int n,int *max,int *min){
    max=&a[0];
    min=&a[0];
	for(int i=0;i<n;i++){
    if(*max<a[i]) max=&a[i];  //将max变为a[i]的别名
    if(*min>a[i]) min=&a[i];
    }
}
***************************************/


/*****原因分析*****/  
//在extremum函数中sizeof(a)=4,主函数中sizeof(a)=40,
//反正它应该是发生了啥不为我所知的变化就是不行
#include<iostream>
using namespace std;
int main(){
	int *a;
	*a=8;    //指针不能直接指向整数 
	cout<<*a<<endl;  //无法输出 
	return 0;
}

#include<iostream>
using namespace std;
int main(){
	int *a,i=8;
	*a=i;
	cout<<*a<<endl;  //输出8 
	return 0;
}


指针-法二

#include<iostream>
void extremum(int a[],int n,int *max,int *min);
using namespace std;
int main(){
    int a[]={12,34,56,7,3,99,67,45,3,80};
    int max,min;
    extremum(a,sizeof(a)/sizeof(a[0]),&max,&min);  //通过引用(&)将整型int变为指针带入到函数中
    cout<<"max="<<max<<" min="<<min<<endl;
    return 0;
} 
void extremum(int a[],int n,int *max,int *min){
    *max=*min=a[0];
    for(int i=0;i<n;i++){
        if(*max<a[i]) *max=a[i];
        if(*min>a[i]) *min=a[i];
    }
}

指针-法三

#include<iostream>
int max,min;
void extremum(int a[],int n);
int main(){
    int a[]={12,34,56,7,3,99,67,45,3,80};
    extremum(a,sizeof(a)/sizeof(a[0]));
    std::cout<<"max="<<max<<" min="<<min<<std::endl;
    return 0;
}
void extremum(int a[],int n){
    int *p;
    max=min=*a;  //对于数组a,*a的就是指向a数组中的第一个数 
    for(p=a+1;p<a+n;p++){  //p=a+n的意思是指针p指向数组a的最后一位的后一位 
                    //从a+1即a数组中第二个数开始,因为max和min的初始化值为a[0] 
        if(max<*p) max=*p;
        if(min>*p) min=*p;
    }
}

全局变量

#include<iostream>
int _max,_min;       //不能命名为 max(min) , max 和标准库的 std::max 同名了
void extremum(int a[],int n);
using namespace std;   //就是有这个的时候,全局变量定义中不能有max和min 
int main(){
    int a[]={12,34,56,7,3,99,67,45,3,80};
    extremum(a,sizeof(a)/sizeof(a[0]));
    cout<<"max="<<_max<<" min="<<_min<<endl;
    return 0;
} 
void extremum(int a[],int n){
    _max=_min=a[0];
    for(int i=0;i<n;i++){
        if(_max<a[i]) _max=a[i];
        if(_min>a[i]) _min=a[i];
    }
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值