应用一:
交换两个变量的值
【如果不使用指针作为参数是无法交换的!】
//交换两个变量
#include<iostream>
using namespace std;
void swap(int *p, int *q){//传入两个指针
int t = *p;
*p = *q;
*q = t;
}
int main(){
int a = 5;
int b = 6;
swap(&a,&b);//调用 ,实参为a,b的地址
cout<<a<<" "<<b<<endl;//输出:6 5
return 0;
}
应用二
函数返回值只能返回一个,可以用指针作为参数,带回结果
#include<iostream>
using namespace std;
//函数返回多个值,某些值只能通过指针返回
//传入的参数实际上是需要保存带回的结果的变量
void minmax(int a[],int len, int *min, int *max);//int *min, int *max:把要接收的结果的变量的地址存进去
int main(){
int a[] = {1,2,3,4,5,6,7,8,9};
int min,max;
minmax(a,sizeof(a)/sizeof(a[0]),&min, &max);
cout<<"min = "<<min<<endl<<"max = "<<max;
return 0;
}
void minmax(int a[],int len, int *min, int *max){ //int *min, int *max:带回结果
*min = *max = a[0];
for(int i = 1;i < len; i++){
if(a[i] > *max){
*max = a[i];
}
if(a[i] < *min){
*min = a[i];
}
}
}
函数返回运算的状态,结果通过指针返回。
下【面这段代码可用于C用于处理异常】
#include<iostream>
using namespace std;
//如果除法成功返回1,算术结果由指针带回
int divide(int a, int b, int *result) {
int ret = 1;
if(b == 0) ret = 0;
else{
*result = a/b;
}
return ret; //返回 1 或 0
}
int main(){
int a,b;
int c;
cin>>a>>b;
if(divide(a, b, &c)){//判断除法是否成功
cout<<c;
}
return 0;
}