2 daniel 0523 Daniel_0523 于 2016.09.19 20:58 提问

C++中一个传引用的超级诡异问题 2C

// main.cpp
#include
using namespace std;

void func(int& tmp){
tmp = 5;
}

int main()
{
int x = 3;
int y = 4;
func(y=x);
cout << y;

    return 0;

}

程序执行后结果为 205.
若将func中的 t=5注释掉后,程序执行结果为 203.

求大神讲解下原因??

g++ -o main main.cpp
g++ -v
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

3个回答

feng1790291543
feng1790291543   Ds   Rxr 2016.09.19 21:27

一系列赋值操作,在原有基础上改变地址

oyljerry
oyljerry   Ds   Rxr 2016.09.19 21:50

引用就会改变它所指向的值

KoalaZB
KoalaZB   2016.09.20 00:08

把代码copy下去跑了一遍 却没有出现你说的问题 图片说明

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java中的经典问题:传值与传引用
参数传递的秘密  知道方法参数如何传递吗?  记得刚开始学编程那会儿,老师教导,所谓参数,有形式参数和实际参数之分,参数列表中写的那些东西都叫形式参数,在实际调用的时候,它们会被实际参数所替代。  编译程序不可能知道每次调用的实际参数都是什么,于是写编译器的高手就出个办法,让实际参数按照一定顺序放到一个大家都可以找得到的地方,以此作为方法调用的一种约定。所谓“没有规矩,不成方圆”,有了这个规
IIS-7.5版本中一些诡异问题的解决方案
IIS-7.5版本中一些诡异问题的解决方案
hdu 2546 饭卡 换了问法的01背包
饭卡里钱数多于5元和小等于5元情况不同,要想最后余额最少,一定是最后买最贵的菜,且卡里钱大等于5越小越好,但饭卡买完最贵的菜外不一定能刚好刷到5元,一定是大等于5,用m-dp[m-5]能凑成最小大于5元的钱数去买最贵的菜,即余额最少的钱数 饭卡 Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32
传值和传引用、传指针的区别
c语言中所有传递给函数的参数
C/C++语言函数参数传递:传值,传指针,传引用
前面我们介绍了函数的调用约定,明白了函数调用者与被调用者之间传递参数的顺序与如何进行栈恢复的。 实际上,函数调用者如何将参数传递给被调用者也是有讲究的。 总的来说,函数参数传递分为3种情况:传值,传指针和传引用。 首先,理解一下实参与形参的概念。 int func(int x)//x是形参 {     return x*x; } int main(void) {     int
传值、传引用、传值
一、 函数参数传递机制的基本理论   函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。以下讨论称调用其他函数的函数为主调函数,被调用的函数为被调函数。   值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来
C/C++的值传递,指针传值和引用传值的区别
首先让我们来看下面几个代码:
java中传值与传引用
java中传值与传引用,详细讲解java中的传值与传引用
c语言传值调用与引用调用
调用:把实参的值赋给形参 1、传值调用 先把实参的值复制一份,把复制后的实参的副本赋给形参,之后形参如何变化与实参无关。 2、引用调用 把实参(int a)的地址(&a)赋给形参(指针变量,比如*b,这时b=&a,即b指向变量a),如果*b(也即a对应的内存空间)发生变化,也就是变量a的值发生了变化。 eg: main() {  int a=0;  fun
C语言中不能使用引用传参
如果需要使用引用传参,必须在cpp中使用,在c语言中使用时编译通不过。