怎樣生動的理解C語言中的返回值return?

時間 2021-05-29 23:05:32

1樓:醉臥沙場

知道C語言的返回值是什麼並不難,它一般只是乙個儲存在約定暫存器(比如eax)中返回給呼叫函式讀取的數值而已。但是如果你需要了解整個函式呼叫以及返回的過程,才能對其有更全面的理解。

我給很多人解釋過函式呼叫和返回的事情了,所以這裡不再過多贅述細節。有興趣的話可以看我為此寫的系列文章:

醉臥沙場:簡單函式的呼叫原理

醉臥沙場:簡單函式的返回原理

醉臥沙場:遞迴函式的堆疊操作

2樓:

函式可以模擬為做一件事。

相應的,做一件事可能有結果,也可能沒有結果。

比如,你去算一道數學題1+2,最終得到了結果3,那麼return 3就代表你做完了這件事的結果。

比如,你往前走兩步,整個過程你只是單純的走了兩步,關注點在這個動作上,那麼便不需要return任何值。

3樓:Zombie110year

函式在呼叫時會從記憶體中分配一塊區域,建立乙個 「幀」,在這上面為函式的引數,定義的變數以及返回值預留了位置。這些幀以棧的形式組成集體。

執行編譯好的程式時,一定是先從 main 函式開始的。你在 main 函式上呼叫了其他函式,例如 foo1 函式,就會在 main 函式的幀之上再加一層 foo1 函式的幀。

在執行 foo1 的開始, 會將實際引數的值複製乙份到 foo1 幀上,這是因為 c 語言按值傳遞的特性。如果你將乙個指標傳入,雖然指標也是被複製的,但是可以通過指標儲存的位址找到幀之外的物件。這是用指標實現的引用傳遞。

然後,執行程式的機器碼中屬於函式 foo1 的部分。經過計算,賦值等操作之後,幀上的資料被改變了。

執行到函式的 return 語句或末尾時,這個函式結束,當前所處的幀也將被銷毀。如果函式有返回值且在呼叫處被賦值給另乙個變數(姑且命名為 a),那麼就會把幀上屬於返回值的區域中的值複製到屬於變數 a的記憶體區域;如果沒有,幀上的資料就隨著被銷毀的幀消失在茫茫記憶體中了。

4樓:獨孤子煊

把系統想象成乙個三觀超正、極端可愛的妹子

你在她這裡做各種各樣的事情

有的很奇怪,有的很正常

但無論你怎麼做,她都有回應

不會像渣女一樣吊著你

這個回應大多數情況下你是不需要聽見、也聽不見的有時候return的不是0

她告訴你:「是這個哦?」「這樣是可以的。」「不,那樣不行的哦!不可以不可以!」

但無論如何

她都有回應你

5樓:

關注 「函式」 的概念, 而不是返回值的概念, 函式是乙個集合到另乙個集合的對映.

intsucc

(intx)

對於複雜一點的函式, 實現方式就跟數學有點差別了, 因為 C 是命令式的, 數學傾向於函式式, 但不管這個對映的過程是怎樣的, 這個對映的像總是返回值.

比如斐波那契數列

2\end" eeimg="1"/>

你照樣可以寫

intfib

(intx)

無非就是引數型別, 返回值型別, 引數列表, 返回值列表這幾個要素, 每個語言翻來覆去都是這樣的, 寫成數學一點的樣式可能給人的感覺會親切一些吧.

請問c語言中的 的返回值是什麼?

暮無井見鈴 一段時間內 都是。至少在 C99 C17 中,true 就是 int 型別的 1 不過在 C23 1 中改掉了。true 變成了 Bool 1u 型別變成了 Bool 而在預處理環境中表現為無符號整數。 邱昊宇 是 int 型的 0 或者 1 The equal to and not e...

c語言中的RETURN()返回值是什麼意思?

大多數函式在執行完畢後,需要向呼叫者報告函式的執行結果,就像大多數leader都會要求 及時回話 一樣。函式的執行結果可以是數學計算的值,也可以是用以表示操作執行狀態的其他值 例如寫磁碟檔案是否成功,成功則搞0,不成功則報告其他值 一般而言,向呼叫者報告執行結果是通過函式的返回值來實現的,也就是通過...

C 的函式返回值是如何構造的?

你如果是想問為什麼少輸出乙個new的話,那是因為F在隱式建立返回值物件的過程中,呼叫的是複製建構函式A const A 而不是預設的無參建構函式A 所以你自定義的無參建構函式A 並沒有捕獲到這次構造。include using namespace std struct A A A const A o...