VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 412|回复: 2

[交流] 一个例子交流下

[复制链接]
47_avatar_middle
在线会员 softcheng 发表于 2017-10-19 16:40:09 | 显示全部楼层 |阅读模式
3驿站币
int a = 4;
int &fn(int x)
{
        a = a + x;
        return a;
}

void liti()
{
        int i = 5;
        TRACE("fn = %d\n" , fn(i));

        fn(i) = 20;
        TRACE("fn = %d\n" , fn(i));

        i = fn(i);
        TRACE("fn = %d\n" , fn(i));
}

输出结果是什么 ,为什么 ?  主要是第二个,第一个估计都知道





上一篇:想将某个类封装成dll,但这是个派生类,可以封装么
下一篇:有谁搞个win7下设置IP信息的

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

01_avatar_middle
online_admins admin 发表于 2017-10-19 18:05:32 | 显示全部楼层
1、执行完:
int i = 5;
TRACE("fn = %d\n" , fn(i));
这两句之后,i 的值为5,a 的值为5+4=9,所以打印出来的是9,没错吧?

2、执行完:
fn(i) = 20;
这句之后,i 的值还是为5,a 的值就是 9+5 = 14,但是之后又赋值 20了,所以 a 的值为20了。
TRACE("fn = %d\n" , fn(i));
再执行这句之后,i 的值还是为5,所以 a 的值就是 20+5=25了,打印出来25没错吧?

3、执行完 i = fn(i); 这句之后,从右往左执行,先执行 fn(i),i 的值之前是5,所以a的值就是 5+25=30,之后又将 30 赋值给 i,所以 i 也等于 30 了。之后再执行 TRACE("fn = %d\n" , fn(i)); 语句,i 的值是30,a 的值就是 30+30=60,所以就打印出了 60

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

47_avatar_middle
ico_lz  楼主| softcheng 发表于 2017-10-19 22:21:09 | 显示全部楼层
老大的分析正确 ,这个例子 的关键就是 引用 和 全局变量的赋值,不小心 会算错

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-8-20 23:18

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表