C 函式的返回值,你不懂得!陷阱無處不在!

2022-09-08 06:03:10 字數 1115 閱讀 7246

csdn,是我每天必上的**,每天上來就看看主題新聞,看看部落格,看看論壇,看看新技術的發展,看看別人在程式設計中遇到的問題,自己也長個記性,別犯了同樣的錯誤。剛剛在論壇看了一篇文章,將面試的,有這麼一道題:題如下:

這段小**,你不執行,就你覺的有錯誤嗎?

我一看,覺的應該有問題的,就是fun函式中的p是乙個臨時變數,怎麼可以返回呢?

這個程式肯定是出錯的。但是我把**敲到機子裡執行,結果是對的,我就仔細的看著**,也不知道問什麼?我知道這個問題的解在

書上的哪乙個部分,翻開書,茅塞頓開,豁然開朗啊!自己有糊塗了,同時,自己有長進了。哈哈!故寫這篇博文和大家共享。如果你

已經會了,說明你很屌了,基礎很紮實,至少是這一部分很紮實。

現在我就來講講這個程式問什麼是對的?同時,在講講如何讓這個程式不對,在講出別的容易犯錯誤的地方。

首先請允許我再貼出一段**,如果你不同意也沒有辦法,因為這是我的部落格,我的地盤,不是嗎?**如下:

這個是將返回值改成了int型的了!你敲到你的機子上執行,看看!不錯,沒有錯誤!

你肯定想知道,temp是乙個臨時變數,在fun函式中是乙個變數,但是如果出了這個函式

還有作用效果嗎?怎麼可以返回值呢?答案是肯定的,在fun函式之外,這個temp變數時沒有任何作用的。

這個是首先肯定的。

下面在貼出一段**:注意了,問題來了!

你執行上面的**,我在visual studio 2008上執行,是沒有任何error的!但是有乙個warning!

warning c4172: 返回區域性變數或臨時變數的位址

為什麼?

temp是函式執行時建立的臨時變數,fun函式執行結束時,系統釋放temp,函式返回它的位址是沒有任何意義的!

同時,我再貼出下列一段**:

這個也有警告的,warning c4172: 返回區域性變數或臨時變數的位址

同理,函式返回需要依託乙個物件,顯然,被依託的物件不能是函式體內定義的臨時變數,原因與返回指標函式一樣!被呼叫函式內定義的區域性是臨時變數,函式返回時將被釋放!

至於為什麼返回值就ok了?那是系統提供的乙個變數來儲存函式體內的臨時變數的返回值!

所以,這種問題,在公司應聘時,考官可能會出題的!現在,博文就寫到此處為止!如有寫的不妥之處,請提出,望一起討論!

C 函式返回值。

一 params.可變引數,無論有幾個引數,必須出現在引數列表的最後,可以為可變引數直接傳遞乙個對應型別的陣列。class program test msg intarry static void test string msg,params int args 二 ref 引用傳遞 三 out ou...

主函式的返回值返回給誰 主函式返回值

responsebody報406 原因是 要返回的物件沒有setget方法sdfsdf 自定義視 析器和缺省視 析器需同時使用才好用 如果以redireci或forward字首,那麼 走缺省視 析器 return redirect index.jsp return forward index 需寫全...

C 函式返回值型別

c 語言的函式返回值型別可以分為內部型別和自定義型別兩大類。在函式返回內部型別中不能返回陣列型別但可以返回指向陣列的指標,同樣也可以返回指向函式的函式指標。如果希望返回值可以作為左值 即可以放在賦值操作符左邊的 那就必須返回引用型別。而在函式返回自定義型別 即返回類型別 中根據是否可作為左值,返回值...