C++中的值传递、引用传递、地址传递简要说明
时间:2010-08-07 来源:wuchao19881003
一直以来对值传递、引用传递、地址传递都没有彻底的了解,今天再次通过程序详细的描述一下
#include <iostream>
using namespace std;
void swap(int &a,int &b) //引用传递
{
int temp;
temp =a;
a = b;
b = temp;
}
void swap(int *a,int *b) //地址传递
{
int temp;
temp = *a;
*a = *b;
*b =temp;
}
void swap1(int p,int q) //值传递
{
int temp = p;
p = q;
q = temp;
}
int main()
{
int x =20;
int y =24;
int m =10;
int n =11;
swap(&x,&y);
swap(m,n);
int i =20;
int j =24;
swap1(i,j); /*只改变栈中的值,主程序中的值并未改变*/
cout<<x<<"----"<<y<<endl;
cout<<m<<"++++"<<n<<endl;
cout<<x<<"======"<<y<<endl;
return 0;
} 大家发现没有,值传递和引用传递函数内部几乎都是一样的,引用传递相对值传递和地址传递的好处在于在不需要另外开辟一块内存空间,而地址传递和值传递都需要另外开辟空间,从效率上来讲,引用传递的效率比另外两个都要高,对于值传递,它只改变栈内的值,主程序中的值其实并未改变,大家使用的的时候要多加小心。
using namespace std;
void swap(int &a,int &b) //引用传递
{
int temp;
temp =a;
a = b;
b = temp;
}
void swap(int *a,int *b) //地址传递
{
int temp;
temp = *a;
*a = *b;
*b =temp;
}
void swap1(int p,int q) //值传递
{
int temp = p;
p = q;
q = temp;
}
int main()
{
int x =20;
int y =24;
int m =10;
int n =11;
swap(&x,&y);
swap(m,n);
int i =20;
int j =24;
swap1(i,j); /*只改变栈中的值,主程序中的值并未改变*/
cout<<x<<"----"<<y<<endl;
cout<<m<<"++++"<<n<<endl;
cout<<x<<"======"<<y<<endl;
return 0;
} 大家发现没有,值传递和引用传递函数内部几乎都是一样的,引用传递相对值传递和地址传递的好处在于在不需要另外开辟一块内存空间,而地址传递和值传递都需要另外开辟空间,从效率上来讲,引用传递的效率比另外两个都要高,对于值传递,它只改变栈内的值,主程序中的值其实并未改变,大家使用的的时候要多加小心。
相关阅读 更多 +