作者cuteSquirrel (可爱的小松鼠)
看板C_and_CPP
标题Re: [问题] 用函数设定参照的问题
时间Sat Nov 11 21:51:52 2023
这个范例是想展现 reference的特质
reference 相当於原本变数的别名 alias
(有些中文翻译会写成 "参考")
reference 宣告的时候就必须初始化绑定对象,而且一旦绑定,就固定绑定他一辈子。
范例中的 x 作为 传参考int& 到function f里面,绑定的是当初外面呼叫的int a=1
这时候在function f 里面, x 的数值还是 1 (因为绑定的是 int a)
接着,function f 又return x 给原本的呼叫者
所以,回来 f(a)这一行 得到的就是 x
x 刚刚讲过,绑定的是原本的变数a
这时候对 x 赋值 等价於 对变数a 赋值
f(a) = 5 等价於 x = 5 等价於 a = 5
所以,a 的值最终是 5
下方的范例做了小修改,可以留意,其实 x 和 a 操作的对象都位在同一个记忆体位置。
https://onlinegdb.com/ZxFCaqEKJQ
※ 引述《amamoimi (佛仔)》之铭言:
: 各位晚安打扰了
: https://onlinegdb.com/_DyNuxd2H
: 我一直不太明白为什麽为什麽这样写是合法的
: f(a)=5这行不是在把function call设值吗
: 但是照理来说只能assign value给变数吧?(gpt这样跟我讲的,但是他又说我的例子不是
: 设值给f(a)@@)
: 不好意思我好像越问越基本了...谢谢大家
:
: ----
: Sent from BePTT on my OPPO CPH1943
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.37.175.73 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1699710714.A.1C1.html
1F:推 amamoimi: 谢谢大大 11/12 09:31
2F:→ amamoimi: 那请问为什麽其他变数不能这样使用呢?例如如果我把f(x 11/12 09:31
3F:→ amamoimi: )换成int f(int x)的话 这个function call 就不能被赋 11/12 09:31
4F:→ amamoimi: 值了。这是参照变数的特性吗? 11/12 09:31
5F:→ wulouise: return int的话那是暂时变数,你给暂时变数值不存他,跟 11/12 10:22
6F:→ wulouise: 没做事一样,下一秒returned int就消失了 11/12 10:22
7F:→ wulouise: 建议你找一本书看,这些范例从都不是给function值 11/12 10:22
8F:推 amamoimi: 好的 谢谢 11/12 11:03
9F:→ amamoimi: 谢谢您 11/12 11:04
10F:→ cuteSquirrel: 关键点在於传入的 传出的 都是int& 传参考 11/12 17:39
11F:→ cuteSquirrel: 任何对於参考的操作,都会反映在原本的绑定对象上。 11/12 17:39
12F:→ cuteSquirrel: reference参考 做什麽赋值 a就做什麽 11/12 17:40
13F:→ cuteSquirrel: ===== 11/12 17:41
14F:→ cuteSquirrel: 若回传的是普通一般型别 就不具有这个特质 11/12 17:42
※ 编辑: cuteSquirrel (114.37.175.73 台湾), 11/12/2023 17:48:35
15F:推 amamoimi: 嗯嗯我知道 谢谢大大 11/12 18:45