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...