Re: [問題] 用函數設定參照的問題

作者: cuteSquirrel (松鼠)   2023-11-11 21:51:52
這個範例是想展現 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)@@)
: 不好意思我好像越問越基本了...謝謝大家
:
:
作者: amamoimi (佛仔)   2023-11-12 09:31:00
謝謝大大那請問為什麼其他變數不能這樣使用呢?例如如果我把f(x)換成int f(int x)的話 這個function call 就不能被賦值了。這是參照變數的特性嗎?
作者: wulouise (在線上!=在電腦前)   2023-11-12 10:22:00
return int的話那是暫時變數,你給暫時變數值不存他,跟沒做事一樣,下一秒returned int就消失了建議你找一本書看,這些範例從都不是給function值
作者: amamoimi (佛仔)   2023-11-12 11:03:00
好的 謝謝謝謝您
作者: cuteSquirrel (松鼠)   2023-11-12 17:39:00
關鍵點在於傳入的 傳出的 都是int& 傳參考任何對於參考的操作,都會反映在原本的綁定對象上。reference參考 做什麼賦值 a就做什麼=====若回傳的是普通一般型別 就不具有這個特質
作者: amamoimi (佛仔)   2023-11-12 18:45:00
嗯嗯我知道 謝謝大大

Links booklink

Contact Us: admin [ a t ] ucptt.com