请解释一下C++或C#中的引用传递

看过不少资料,说值传递传的是数据的Copy,而引用传递传的是数据的地址。但还是不太理解。
以一段程序为例:
void change(int &x,int &y); //用引用传递参数
int main()
{ int a =1,b=2;
change(a,b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}
void change(int &x,int &y) //函数定义要和函数原型一致
{ int temp;
temp=x;
x=y;
y=temp;
}
//本程序的输出结果是a=2,b=1。若未用引用,则输出结果是a=1,b=2。

///////////////////////////////////////////////////////////
请解释一下上面程序执行时,调用change(int &x,int &y);函数过程中具体发生了什么过程。

未采用引用:执行change()函数,交换a,b的拷贝,然后通过返回值来讲交换后的值拷贝给main函数中的变量。但是change函数没有返回值,因此只进行了a,b的拷贝交换(比如在栈里面临时创建的临时变量x,y,接受到传递过来的参数值(a,b)复制给x,y,x,y进行交换),于是a,b的值不受影响;

采用引用时:执行change()函数,将a,b在内存中的地址传递给临时变量x,y,此时对临时变量x,y操作就是对a,b进行操作,因为x,y和a,b此时在内存中指向的是同样的地址(其实,可以这样想,引用就是变量的别名),那么change()执行完后,a,b的值自然就会发生变化。

建议你好好看一下程序执行过程中a,b,x,y变量在内存中的位置分配和变化图示,就会明明白。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-04-20
引用是 "传址调用" 就相当于传入了实参的地址.这样就可以在函数中修改传入的参数的在变量的值.

在change函数中,x的地址就是a的地址,y的地址就是b的地址.
打个比方,a和x就相当于一个人有两个名字一样.
第2个回答  2010-04-21
你就把引用传递当做地址传递就可以,也就是指针传递的功能一样,两者的功能是相同的,引用传递主要是可以直接写变量名字,不用写指针了

c#中 传递引用 引用传递 两个词应该如何理解?请c神尽量详细回答 跪谢...
传递引用顾名思义就是把引用作为参数传过去,引用传递是把值类型对象用ref修饰传递,即通过引用传递值类型,也就是说传递值(变量)的引用。

什么是引用传递?什么是值传递?区别?
书中说:“c++中参数传递方式有三种:传参数的值(称为值传递,简称传值)、传参数的地址(称为地址传递,简称为传址)和引用传递(简称为传引用),相应的函数调用也就称为传值调用、传址调用、传引用调用。函数定义时参数表中的参数称为形式参数,简称形参。函数调用时参数表中的参数叫做实际参数,...

为什么c++引用传递不产生副本
引用可以理解为与变量同生命周期的指针常量,指针就是地址,传递指针就是传递地址,就像告诉你门牌号一样,不会产生整栋楼的拷贝

值传递和引用传递
值传递和引用传递是两种不同的参数传递方式,C++支持引用传递,而C、Java、Python则主要采用值传递。在C和C++中,当调用函数时,实际上是将实参的值(对于普通变量)或地址(对于指针和数组)复制到函数的参数中。这被称为值传递,意味着函数内部对参数的修改不会影响到原始变量。例如,即使在test函数中...

C++中函数的参数传递,引用传递和指针传递的别。哪种更有效率。_百度知...
一样。其实都是传地址,汇编写出来都是一样的 不过个人感觉哈,引用传递看着更加直白。所以个人习惯引用

C#值传递和引用传递的理解
引用类型需要在堆中显式分配,且不能直接访问,需要在栈中分配一个栈中对象(C++叫指针,C#叫引用)指向其堆中对象。如果:StringBuilder strb = new StringBuilder();StringBuilder strb2 = strb;则在堆中只有一个堆中对象,只是栈中有两个栈中对象指向堆中对象。可以看出:每个变量都是一个栈中对象。

按引用传递传的是什么
C++中的函数有时候会采用按引用的参数传递和返回。比如:int& f(int& a){ a++;return a;} “按引用进行参数传递”很好理解:通常使用的“按指传递”,函数内的操作的实际上是输入参数的一个副本(即函数创建了一个临时变量,其值与输入参数完全相同),对该副本的操作不会影响输入参数的值。而...

C++中使用指针、引用进行参数传递
这是经典的C++问题 1、常规情况 函数参数传递是所谓的“值传递”。啥意思,就是传的只是值,而不是变量自己以身相许。上面的例子来说,main中的ab传递给函数的ab发生了什么呢,是main中的ab把值传递给了函数的ab,这是四个变量!!!main的ab和swap的ab不是一码事!!!当swap通过传值得到a5b10...

C++中关于引用的一个问题??
你可以把引用理解为一个常指针,所以引用一旦初始化,即不可与其它变量联系起来了。这样可以防止野指针等一些指针的弊病~~~也使得函数的按址传参更便于理解。

c\/c++ 关于引用的问题?
也就是(a * b) 会调用operator*(const classA& a1,const classA& a2)其实就是 operator*(a,b)=c;由于operator*()函数返回的是一个const,故不允许对他赋值

相似回答
大家正在搜