當前位置:學者齋 >

計算機 >C語言 >

C語言函式說明與返回值

C語言函式說明與返回值

導語:在C語言中,函式是程式的基本組成單位,因此可以很方便地用函式作為程式模組來實現C語言程式。下面就由小編為大家介紹一下C語言函式說明與返回值,歡迎大家閱讀!

C語言函式說明與返回值

函式的一般形式是:type-specifier function_name(parameter list)parameter declarations{body of the function}型別說明符定義了函式中return語句返回值的型別,該返回值可以是任何有效型別。如果沒有型別說明符出現,函式返回一個整型值。引數表是一個用逗號分隔的變量表,當函式被呼叫時這些變數接收呼叫引數的值。一個函式可以沒有引數,這時函式表是空的。但即使沒有引數,括號仍然是必須要有的。引數說明段定義了其中引數的型別。當一個函式沒有明確說明型別時,C語言的編譯程式自動將整型(int)作為這個函式的預設型別,預設型別適用於很大一部分函式。當有必要返回其它型別資料時,需要分兩步處理:首先,必須給函式以明確的型別說明符;其次,函式型別的說明必須處於對它的首次呼叫之前。只有這樣,C編譯程式才能為返回非整型的值的函式生成正確程式碼。

  一、函式的.型別說明可將函式說明為返回任何一種合法的C語言資料型別

型別說明符告訴編譯程式它返回什麼型別的資料。這個資訊對於程式能否正確執行關係極大,因為不同的資料有不同的長度和內部表示。返回非整型資料的函式被使用之前,必須把它的型別向程式的其餘部分說明。若不這樣做,C語言的編譯程式就認為函式是返回整型資料的函式,呼叫點又在函式型別說明之前,編譯程式就會對呼叫生成錯誤程式碼。為了防止上述問題的出現,必須使用一個特別的說明語句,通知編譯程式這個函式返回什麼值。下例示出了這種方法。

第一個函式的型別說明sum()函式返回浮點型別的資料。這個說明使編譯程式能夠對sum()的呼叫產生正確程式碼。函式型別說明語句的一般形式是:type_specifier function_name(;)即使函式使用形參,也不要將其寫入說明句。若未使用型別說明語句,函式返回的資料型別可能與呼叫者所要求的不一致,其結果是難以預料的。如果兩者同處於一個檔案中,編譯程式可以發現該錯誤並停止編譯。如果不在同一個檔案中,編譯程式無法發現這種錯誤。型別檢查僅在編譯中進行,連結和執行時均不檢查。因此,必須十分細心以確保絕不發生上述錯誤。當被說明為整型的函式返回字元時,這個字元值被轉換為整數。因為C語言以不加說明的方式進行字元型與整型之間的資料轉換,因而多數情況下,返回字元值的函式並不是說明為返回字元值,而是由函式的這種字元型向整型的預設型別轉換隱含實現的。

  二、返回語句

返回語句return有兩個重要用途。第一,它使得內含它的那個函式立即退出,也就是使程式返回到呼叫語句處繼續進行。第二,它可以用來回送一個數值。本章將說明這兩個用途。

(一)從函式返回函式可以用兩種方法停止執行並返回到呼叫程式

第一種是在執行完函式的最後一個語句之後,從概念上講,是遇到了函式的結束符“}”(當然這個花括號實際上並不會出現在目標碼中,但我們可以這樣理解)。例如,下面的函式在螢幕上顯示一個字串。

一旦字串顯示完畢,函式就沒事可做了,這時它返回到被呼叫處。在實際情況中,沒有多少函式是以這種預設方式終止執行的。因為有時必須送回一個值,大多數函式用return語句終止執行,有時在函式中設立了多個終止點以簡化函式、提高效率。切記,一個函式可以有多個返回語句。如下所示,函式在s1、s2相等時返回1,不相等時返回-1。

(二)返回值所有的函式

除了空值型別外,都返回一個數值。該數值由返回語句確定。無返回語句時,返回值是0。這就意味著,只要函式沒有被說明為空值,它就可以用在任何有效的C語言表示式中作為運算元。這樣下面的表示式都是合法的C語言表示式。x=power(y);if(max(x,y)>100)printf(“greater;”)for(ch=get);isdigit(ch);)...;可是,函式不能作為賦值物件,下列語句是錯誤的:swap(x,y)=100;C編譯程式將認為這個語句是錯誤的,而且對含有這種錯誤語句的程式不予編譯。所有非空值的函式都會返回一個值。我們編寫的程式中大部分函式屬於三種類型。第一種型別是簡單計算型-函式設計成對變數進行運算,並且返回計算值。

計算型函式實際上是一個“純”函式,例如sqr()和sin()。第二類函式處理資訊,並且返回一個值,僅以此表示處理的成功或失敗。例如write(),用於向磁碟檔案寫資訊。如果寫操作成功了,write()返回寫入的位元組數,當函式返回-1時,標誌寫操作失敗。最後一類函式沒有明確的返回值。實際上這類函式是嚴格的過程型函式,不產生值。

如果讀者用的是符合ANSI建議標準的C編譯程式,那麼所有這一類函式應當被說明為空值型別。奇怪的是,那些並不產生令人感興趣的結果的函式卻無論如何也要返回某些東西。例如printf( )返回被寫字元的個數。然而,很難找出一個真正檢查這個返回值的程式。因此,雖然除了空值函式以外的所有函式都返回一個值,我們卻不必非得去使用這個返回值。有關函式返回值的一個常見問題是:既然這個值是被返回的,我是不是必須把它賦給某個變數?回答是:不必。如果沒有用它賦值,那它就被丟棄了。請看下面的程式,它使用了mul( )函式。mul( )函式定義為:int mul(int x, int y){......}

在第一行, mul( )的返回值被賦予z,在第二行中,返回值實際上沒有賦給任何變數,但被printf( )函式所使用。最後,在第三行,返回值被丟棄不用,因為既沒有把它賦給第一個變數,也沒有把它用作表示式中的一部分。

標籤: 返回值 函式 語言
  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-tw/jsj/cyuyan/jvww31.html