首先讓我們看一下下面幾個小程序:
(輸入兩個數,按大小順序輸——觀察一下輸出的數值是否能達到目的)
//值傳遞
#include<iostream>
using namespace std;
int main()
{
void max(int a,int b);
int x,y;
cin>>x>>y;
max(x,y);
cout<<x<<endl<<y<<endl;
return 0;
} www.2cto.com
void max(int a,int b)
{
int temp;
if(a<b)
{
temp=a;
a=b;
b=temp;
}
}
//指針傳遞
#include<iostream>
using namespace std;
int main()
{
void max(int*p1,int*p2);
int x,y;
int *point_1,*point_2;
cin>>x>>y;
point_1=&x;
point_2=&y;
max(point_1,point_2);
cout<<x<<endl<<y<<endl;
return 0;
}
void max(int*p1,int*p2)
{
int temp;
if(*p1<*p2)
{
temp=*p1;
*p1=*p2;
*p2=temp;
}
}
//數組傳遞
#include<iostream>
using namespace std;
int main()
{
void max(int a[]);
int a[2];
cin>>a[0]>>a[1];
max(a);
cout<<a[0]<<endl<<a[1]<<endl;
return 0;
}
void max(int a[])
{
int temp;
if(a[0]<a[1])
{
temp=a[0];
a[0]=a[1];
a[1]=temp;
}
}
//引用傳遞
#include<iostream>
using namespace std;
int main()
{
void max(int &,int &);
int x,y;
cin>>x>>y;
max(x,y);
cout<<x<<endl<<y<<endl;
return 0;
}
void max(int &a,int &b)
{
int temp;
if(a<b)
{
temp=a;
a=b;
b=temp;
}
}
經試驗不難發現,第一個涵數是達不到預期目的的,其它三個都可以。聰明的同學一看也就明白,第一個涵數實參傳遞的是值。其它的
都可以看作是傳址(指針自然不必說,數組傳的是首地址,引用就是地址的復制)。