佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1400|回复: 7

C++ 问题

[复制链接]
发表于 9-7-2015 11:29 PM | 显示全部楼层 |阅读模式
关于 pass by reference 和  pass by value 有什么区别
有大大能告诉我吗?
回复

使用道具 举报


ADVERTISEMENT

发表于 10-7-2015 12:17 PM | 显示全部楼层
By reference.
  1. void Foo(int &y)
  2. {
  3.     y = y + 1;
  4. }
复制代码

當你在main call Foo時,在 main的original argument value 會+1.

pass by value
  1. void Foo(int y)
  2. {
  3.     y = y + 1;
  4. }
复制代码

當你在main call Foo時,在 main的original argument value 不會+1.

祝順利
回复

使用道具 举报

 楼主| 发表于 10-7-2015 06:11 PM | 显示全部楼层
yan13 发表于 10-7-2015 12:17 PM
By reference.

當你在main call Foo時,在 main的original argument value 會+1.

still not understand , gt another way introduce? tq

回复

使用道具 举报

发表于 10-7-2015 08:53 PM | 显示全部楼层
https://www.ptt.cc/man/C_and_CPP ... 38900566.A.8C9.html
看看這個.
不過因為你的問題,我看到google的建議(?).我是有點驚訝的,我通常都是可讀性重要過執行速度,因為我不會記得我2-3年前寫了什麼東西.算是個意外收穫吧.如果google是執行速度優先,我能了解的.
http://frank6831.pixnet.net/blog ... %BB%A3pass-by-value
回复

使用道具 举报

发表于 11-7-2015 11:56 AM | 显示全部楼层
C++ 是古老又难精的语言 。。

在 C++ ,不会再看到   for(int i=0; i<5; i++) {}
都没有用 integer declare i ,当 i 太小,就浪费 memory;当 i 太大过 integer, 就 overflow
都是节省 memory 优先 。。



建议看这本  Accelerated C++: Practical Programming by Example

http://www.amazon.com/Accelerate ... words=accelerated+c
回复

使用道具 举报

发表于 11-7-2015 12:32 PM | 显示全部楼层
pass by reference:   就是你自己出门去shopping,等你回来的时候的时候,你钱包里的钱就变了。
pass by value:你老婆出门逛街了,等她回来的时候,你钱包里面的钱没少


哈哈 这是男人的痴心梦想而已
回复

使用道具 举报

Follow Us
发表于 1-8-2015 08:21 AM | 显示全部楼层
本帖最后由 musicalangel 于 1-8-2015 08:23 AM 编辑

等号(=) , 在数学里面表示左边的值等于右边的值

而在, 在programming 里面的意思则是将右边的值丢到左边变数, 专业术语叫做传值( 或传址).

传的方法有两种, 就是你问的 pass by value(传值) 跟 pass by reference(传址)

pass by value 是将右边的变数的资料, "复制" 给 左边, 例如下:


  1. int A=3;
  2. int B=A;
复制代码


A 的资料"复制"给 B, 在pass by value里面, A 跟 B 是不同个体, 你如何修改B, 都不会影响到A, 例如

  1. B=B-3;
  2. println(A);
  3. println(B);
复制代码


你会发现到结果是 3 0

听起来我像是讲废话对吧? 这是一般programming的用法. 你会这样认为是正常的.

至于pass by reference 是右边的"所在地"告诉左边. (所在地在专业术语称作 pointer / address, 可能意义不同, 但是我都是这样记忆的), 用法如下:

  1. int A=3;
  2. int C= &A;
复制代码


这边跟上面的不同是, C 存的不是数值(3), 而是A在记忆体里面的位置. 你如何修改C, 都会影响到A

  1. C=C-3;
  2. println(A);
  3. println(C);
复制代码

你会发现到结果是 0 0
因为C扣3的时候, C 指向 A, 所以A会受影响.

如果你看到这边还是不明白...
你就想象成,
pass by value 是鸣人的影分身, 每个都是实体,
pass by reference 是佐助的分身术, 只有一个是实体, 其他都是幌子.

至于为何有两种做法, 原因很多, 例如
1) 节省记忆体, 当变数很大的时候, 例如 double, big int 等, pass reference 会比 pass value 节省一些
2) 避免重复, 当你写大型系统的时候, 你会难免遇到一些需要重新命名, 但是他们都是一体的, 这时就要用到
3) 其他

如果不知道鸣人或佐助是什么的, 就只好保重了

共勉之...
回复

使用道具 举报

发表于 18-8-2015 03:46 PM | 显示全部楼层
我个人认为最简单的比喻。
pass by value 是把我U盘里的A片拷贝带你的U盘里,让你回家看。
(如果你那A片别女朋友发现删除,跟我没关系)
pass by reference 是把我的U盘借你回家看。
(如果你那A片别女朋友发现删除,我的珍藏就GG了~)
回复

使用道具 举报


ADVERTISEMENT

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 29-3-2024 04:22 PM , Processed in 0.066671 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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