//C++中的参数传递,用传值实现(以交换函数为例)
#include<iostream>
using namespace std;
//定义有参函数swap且传值实现
void swap(int m,int n){
int temp;
temp=m;
m=n;
n=temp;
}
int main(){
int a,b;
cout<<"请分别输入a和b的值:"<<endl;
cin>>a>>b;
swap(a,b);
cout<<"a和b交换后的分别是:"<<endl;
cout<<a<<" "<<b;
}
输出结果:
解释:传值只是将实参的值传给了形参,形参之间的交换不影响实参的值
//C++中的参数传递,用传址(指针)实现(以交换函数为例)
#include<iostream>
using namespace std;
//定义有参函数swap且传址(指针)实现
void swap(int *m,int *n){
int temp;
temp=*m;
*m=*n;
*n=temp;
}
int main(){
int a,b,*p1,*p2;
cout<<"请分别输入a和b的值:"<<endl;
cin>>a>>b;
p1=&a;p2=&b;//给int*类型的指针变量p1赋int型变量a的地址
swap(p1,p2);
cout<<"a和b交换后的分别是:"<<endl;
cout<<a<<" "<<b;
}
输出结果:
解释:通过交换地址实现,分别定义指针变量指向变量a、b的地址,再将两个地址进行交换以实现a、b值的交换,因为定义了多个指针变量,所以相对繁琐,效率较低
//C++中的参数传递,用传址(引用)实现(以交换函数为例)
#include<iostream>
using namespace std;
//定义有参函数swap且传址(引用)实现
void swap(int& m,int& n){
//这里参数还是int型的m、n,只不过附加了一个取地址的操作
int temp;
temp=m;
m=n;
n=temp;
}
int main(){
int a,b;
cout<<"请分别输入a和b的值:"<<endl;
cin>>a>>b;
swap(a,b);
cout<<"a和b交换后的分别是:"<<endl;
cout<<a<<" "<<b;
}
输出结果:
解释:也是地址的交换,只不过是省去了指针的麻烦,直接将输入的变量进行取地址操作进行地址交换,因而提高效率
//C++中的参数传递,用传址(数组)实现求10个整数的最大数
#include<iostream>
using namespace std;
#define N 10
int max(int b[]){
int i,n;
n=b[0];
for(i=1;i<N;i++)
if(n<b[i]) n=b[i];
return n;
}
void main ( ) {
int a[10];
int i,m;
for(i=0;i<N;i++)
cin>>a[i];
m=max(a);
cout<<"the max number is:"<<m;
}
输出结果: