????? c++ 函数的参数传递方式有值,指针以及引用三种方式,具体的区别是前两种其实都是值传递,只不过指针是以指针地址值的形式传递的,值传递时,形参是实参的副本,即函数中对形参的修改不会影响到实参的实际值,可以这样理解,值和指针传递的参数,实参具有不变性。但是引用是可变的,即函数中对形参的修改实参会跟着改变,值和指针的方式是C语言继承过来的,但是引用为C++新的特性,综上所述,如果函数中的形参是一个大的对象时,如果用值传递,显然会浪费内存空间,因为值传递会copy一个实参的副本,而指针同样也会copy只不过copy的是地址,相对来说小一点,但是引用最合适,因为不参加其他的操作,唯一不足的是要分清特点,如果不想修改引用的值,则最好把形参声明为const,具有不变性。一下为例子。供参考
?
???????
class="cpp">#include "stdafx.h" #include <iostream> using namespace std; void swap1(int a,int b);//值传递 void swap2(int *a,int *b);//指针传递 void swap3(int &a,int &b); int main(){ int x = 1,y=2; swap1(x,y); cout<<"x:"<<x<<"X的原来地址为:"<<&x<<endl; swap2(&x,&y); cout<<"x的地址值:"<<&x<<endl; swap3(x,y); cout<<"x的引用值:"<<x<<endl; system("pause"); return 0; } void swap1(int a,int b){ if(a !=0 && b!=0){ int swap; swap =a; a = b; b=swap; cout<<"a:"<<a<<endl; } } void swap2(int *a,int *b){ if(a!=0&&b!=0){ int *swap=a; a = b; b = swap; cout<<"a的值:"<<a<<endl; } } void swap3(int &a,int &b){ if(a!=0&&b!=0){ int &swap=a; a = b; b = swap; cout<<"a的引用值:"<<a<<endl; } }
??? 运行后的值为:
???
a:2 x:1X的原来地址为:001BF33C a的值:001BF334 x的地址值:001BF33C a的引用值:2 x的引用值:2 请按任意键继续. . .
?