引用
#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];
}
}