go語言入門(閉包問題),這個變數怎麼傳遞進去的

2022-10-12 11:02:27 字數 828 閱讀 3439

1樓:番茄大聖

@microroom 回答得很正確,我補充一點就是n的作用域問題。addupper函式每次被呼叫,系統都會分配一塊新的記憶體給n變數,在addupper函式返回的函式引用消失前,該n變數都不會被釋放。在該內部函式中,n可以當做全域性變數看待(n不是全域性變數),同乙個內部函式引用到的是同乙個n變數。

2樓:匿名使用者

函式addupper會返回乙個函式(即函式addupper的返回型別是乙個函式),當呼叫這個返回的函式時,需要向它傳遞乙個int變數作為引數,同時,這個函式也會返回乙個int型別的值,這個值等於addupper的區域性變數n先加上x,再返回n。

所以,當執行f:=addupper()時,實際上就是將呼叫addupper()後的返回值賦給了f。而前面說了,addupper是會返回乙個函式的(addupper返回的函式的原型是通過func(int) int來限定的)。

所以,f實際上就是乙個函式,它的簽名就是func(int) int,即呼叫f時需要傳遞乙個int型別的引數,同時f也會返回乙個整數。

當呼叫f(1)時,會執行以下**:

n=n+x

return n

而n是外圍函式addupper的區域性變數,初始值是10,x就是你呼叫f(1)時傳入的引數1。所以,執行n=n+x後,n變成了11,然後返回n(11)。所以,f(1)的結果就是11。

當接著呼叫f(2)時,執行的**還是一樣的,都是:

n=n+x

return n

只不過n現在是11(因為呼叫f(1)時,改變了n,從10變成了11),而x是2。所以,f(2)的結果就是13,同時,呼叫f(2)後n也成了13。

C語言中關於檔案包函問題,c語言中有關檔案的問題

錯誤 重複宣告fun3 在 file1 中,include file3.c 表明在file1.c裡宣告file3.c一次 而 include file2.c 表明在file1.c裡宣告file2.c一次 在 file2 中,include file3.c 表明在file2.c裡宣告file3.c一次...

C語言這個F函式再指標C語言指標問題

28f為傳值呼叫。所以f中的修改不影響main中變數的值。輸出的還是原始值。即 4,3,5 選d29 a 4b a q b w q b q null a q 0 由於q已經賦值為null,再對 q賦值會引起程式崩潰。這個不對 b w p 指標間賦值,正確。c p a 也就是a a 正確。d p w ...

01揹包問題 動態規劃 整理成c語言!謝謝

征服歐洲 include include int c 50 50 int w 10 v 10 int x 10 int n void knapsack dp int n,int w void output sack int c 50 50 int k void knapsack dp int n,i...