重溫C語言系列之二(函式的返回值)

2021-05-23 20:06:47 字數 649 閱讀 7518

1.函式的返回值不可以是區域性變數;

2.函式內的區域性變數在函式呼叫完成之後自動銷毀,因為區域性變數是存放於棧空間內的;

理論很明確,但是實際應用中還是有一些疑惑的。先找幾個常見的例子一步一步深入說明。

這個執行結果是什麼? 按照上面的理論,我們返回乙個區域性變數,這個區域性變數在函式呼叫完成後已被自動銷毀,那返回值應該是亂值才對。但實際上執行結果是正確的。為什麼?

這個地方我曾經也很迷惑。因為有乙個概念不清楚,所有不明白這什麼這樣可以。我們返回的是乙個值,在返回值後我們將其賦給了變數c,相當於建立了乙個副本,不論add()中的區域性變數是否銷毀都沒有關係了。

但是如果我們返回的是乙個位址,指向區域性變數的位址,就不行了。因為區域性變數的位址在函式呼叫完成後銷毀,我們返回的位址就指向的區域內就不是我們想要的值了,因為這塊區域已是公共的,可被其它函式占用的,其內容是不定的。看如下例子:

在我的電腦上,編譯時會提示warning message:

hello.c: in function 『hello』:

hello.c:25: warning: function returns address of local variable

執行結果當然是一堆亂碼了。

總結一句話:要時刻清楚你使用的指標指向**。

C語言的函式返回值

一 背景 談到c語言的函式返回值,可能會感覺很親切,不就是乙個函式返回值嘛,當初學c語言的時候早就學過了很easy嘛,我曾經也是這麼想的。後來要上研究生了,研究生階段搞得就是c,所以又重新開始學習c,學習c的過程中遇到了很多問題,在此部落格中一一記錄。實際過程中遇到的第乙個問題自然就是函式返回值了。...

無返回值 C語言高階之路 函式 返回值!

c 語言的函式可以返回陣列以外 不包括陣列指標 的任何型別.不寫明返回型別,在以前的 c 語言版本中是預設返回 int,現在 c99 c 已不支援.void 表示沒有返回值,也就無須 return 語句 如果是其他語句必須有 return 語句.在 main 函式中 只是 main 函式 若忘掉 r...

C語言printf函式返回值

首先來看 為什麼會列印出這樣的結果呢?讓我們來看看 1 首先列印最內層printf的結果 43 2 其次最內層print函式 return 長度 可以看成字串長度 為 2 即 printf d printf d 2 3 最後第二個printf函式 return 長度為1 即 printf d 1 再...