c語言中,返回值是什麼意思

時間 2021-09-11 22:25:31

1樓:敖子鹿妍晨

在乙個函式定義中,函式體之前的所有部分稱為函式頭,它給出了該函式的返回型別、每個引數的次序和型別等函式原型資訊,所以當沒有專門給出函式原型說明語句時,系統就從函式頭中獲取函式原型資訊。

乙個函式的原型語句就是其函式頭的乙個拷貝,當然要在最後加上語句接上結束符分號。函式原型語句與函式頭也有細微的差別,在函式原型語句中,其參數列中的每個引數允許只保留引數型別,而省略引數名,並且若使用引數名也允許與函式頭中對應的引數名不同。

全文如下:

一)、定義格式

《型別名》

《函式名》

([《參數列》])

《函式體》

《型別名》為系統或使用者已定義的一種資料型別,它是函式執行過程中通過return語句要求返回的值的型別,又稱為該函式的型別。當乙個函式不需要通過return語句返回乙個值時,稱為無返回值函式或無型別函式,此時需要使用保留字void作為型別名。當型別名為int時,可以省略不寫,但為了清楚起見,還是寫明為好。

《函式名》是使用者為函式所起的名字,它是乙個識別符號,應符合c++識別符號的一般命名規則,使用者通過使用這個函式名和實參表可以呼叫該函式。

《參數列》又稱形式參數列,它包含有任意多個(含0個,即沒有)引數說明項,當多於乙個時其前後兩個引數說明項之間必須用逗號分開。每個引數說明項由一種已定義的資料型別和乙個變數識別符號組成,該變數識別符號成為該函式的形式引數,簡稱形參,形參前面給出的資料型別稱為該形參的型別。乙個函式定義中的《參數列》可以被省略,表明該函式為無參函式,若《參數列》用void取代,則也表明是無參函式,若《參數列》不為空,同時又不是保留字void,則稱為帶參函式。

《函式體》是一條復合語句,它以左花括號開始,到右花括號結束,中間為一條或若干條c++語句。

在乙個函式的參數列中,每個引數可以為任一種資料型別,包括普通型別、指標型別、陣列型別、引用型別等,乙個函式的返回值可以是除陣列型別之外的任何型別,包括普通型別、指標型別和引用型別等。另外,當不需要返回值時,應把函式定義為void型別。

二)、定義格式舉例

(1)void

f1()

(2)void

f2(int

x)(3)

intf3(int

x,int*

p)(4)

char*

f4(char

a)(5)

intf5(int&

x,double

d)(6)

int&

f6(int

b[10],

intn)

(7)void

f7(float

c[n],

intm,

float&

max)

(8)bool

f8(elemtype*&

bt,elemtype&

item)

在第一條函式定義中,函式名為f1,函式型別為void,參數列為空,此函式是乙個無參無型別函式。若在f1後面的圓括號內寫入保留字void,也表示為無參函式。

在第二條函式定義中,僅帶有乙個型別為int的形參變數x,該函式沒有返回值。

在第三條函式定義中,函式名為f3,函式型別為int,函式引數為x和p,其中x為int型普通引數,p為int*型指標引數。

在第四條函式定義中,函式名為f4,函式型別為char*,即字元指標型別,參數列中包含乙個一維字元陣列引數。注意:在定義任何型別的一維陣列引數時,不需要給出維的尺寸,當然給出也是允許的,但沒有任何意義。

在第五條函式定義中,函式名為f5,返回型別為int,該函式帶有兩個形參,乙個為

整型引用變數x,另乙個為雙精度變數d。

在第六條函式定義中,函式名為f6,函式型別為int&,即整型引用,該函式帶有兩個形參,乙個是整型陣列b,另乙個是整型變數n。在這裡定義形引數組b所給出的維的尺寸10可以被省略。

在第七條函式定義中,函式名為f7,無函式型別,參數列中包含三個引數,乙個為二維單精度型陣列c,第二個為整型變數m,第三個為單精度引用變數max。注意:當定義乙個二維陣列引數時,第二維的尺寸必須給出,並且必須是乙個常量表示式,第一維尺寸可給出也可不給出,其作用相同。

在第八條函式定義中,函式名為f8,返回型別為bool,即邏輯型別,該函式帶有兩個引數,乙個為形參bt,它為elemtype的指標引用型別,另乙個為形參item,它是elemtype的引用型別,其中elemtype為一種使用者定義的型別或是通過typedef語句定義的乙個型別的別名。

三)、有關函式定義的幾點說明

1.函式原型語句

在乙個函式定義中,函式體之前的所有部分稱為函式頭,它給出了該函式的返回型別、每個引數的次序和型別等函式原型資訊,所以當沒有專門給出函式原型說明語句時,系統就從函式頭中獲取函式原型資訊。

乙個函式必須先定義或宣告而後才能被呼叫,否則編譯程式無法判斷該呼叫的正確性。乙個函式的宣告是通過使用一條函式原型語句實現的,當然使用多條相同的原型語句宣告同乙個函式雖然多餘但也是允許的,編譯時不會出現錯誤。

在乙個完整的程式中,函式的定義和函式的呼叫可以在同乙個程式檔案中,也可以處在不同的程式檔案中,但必須確保函式原型語句與函式呼叫表示式出現在同乙個檔案中,並且函式原型語句出現在前,函式的呼叫出現在後。

通常把乙個程式中使用者定義的所有函式的原型語句組織在一起,構成乙個標頭檔案,讓該程式中所含的每個程式檔案的開始(即所有函式定義之前)包含這個標頭檔案(通過#include命令實現),這樣不管每個函式的定義在**出現,都能夠確保函式先宣告後使用(即呼叫)這一原則的實現。

乙個函式的原型語句就是其函式頭的乙個拷貝,當然要在最後加上語句接上結束符分號。函式原型語句與函式頭也有細微的差別,在函式原型語句中,其參數列中的每個引數允許只保留引數型別,而省略引數名,並且若使用引數名也允許與函式頭中對應的引數名不同。

2.常量形參

在定義乙個函式時,若只允許函式體訪問乙個形參的值,不允許修改它的值,則應把該形參說明為常量,這只要在形參說明的前面加上const保留字進行修飾即可。如:

void

f9(const

int&

x,const

char&

y);void

f10(const

char*

p,char

key);

在函式f9的函式體中只允許使用x和y的值,不允許修改它們的值。在函式f10的函式體中只允許使用p所指向的字元物件或字元陣列物件的值,不允許修改它們的值,但在函式體中既允許使用也允許修改形參key的值。

3.預設引數

在乙個函式定義中,可根據需要對參數列末尾的乙個或連續若干個引數給出預設值,當呼叫這個函式時,若實參表中沒有給出對應的實參,則形參將採用這個預設值。如:

void

f11(int

x,int

y=0)

intf12(int

a,char

op='+',

intk=10)

函式f11的定義帶有兩個引數,分別為整型變數x和y,並且y帶有預設值0,若呼叫該函式的表示式為f11(a,b),將把a的值賦給x,把b的值賦給y,接著執行函式體;若呼叫該函式的表示式為f11(a+b),則也是正確的呼叫格式,它將把a+b的值賦給x,因y沒有對應的實參,將採用預設值0,引數傳送後接著執行函式體。

函式f12的定義帶有三個引數,其中後兩個帶有預設值,所以呼叫它的函式格式有三種,一種只帶乙個實參,用於向形參a傳送資料,後兩個形參採用預設值,第二種帶有兩個實參,用於分別向形參a和op傳送資料,第三個形參採用預設值,第三種帶有三個實參,分別用於傳送給三個形參。

若乙個函式帶有專門的函式原型語句,則形參的預設值只能在該函式原型語句中給出,不允許在函式頭中給出。如對於上述的f11和f12函式,其對應的函式原型語句分別為:

void

f11(int

x,int

y=0);

intf12(int

a,char

op='+',

intk=10);

函式定義應分別改寫為:

void

f11(int

x,int

y)int

f12(int

a,char

op,int

k)4.

陣列引數

在函式定義中的每個陣列引數實際上是指向元素型別的指標引數。對於一維陣列引數說明:

《資料型別》

《陣列名》

它與下面的指標引數說明完全等價:

《資料型別》

*《指標變數名》

其中《指標變數名》就是陣列引數說明中的《陣列名》。如對於f12函式定義中的陣列引數說明int

a,等價於指標引數說明int*

a。也就是說,陣列引數說明中的陣列名a是乙個型別為int*的形參。注意:

在變數定義語句中定義的陣列,其陣列名代表的是乙個陣列,它的值是指向第乙個元素的指標常量,這與陣列形參的含義有區別。

對於二維陣列引數說明:

《資料型別》

《引數名》[《第二維尺寸》]

它與下面的指標引數說明完全等價:

《資料型別》

(*《引數名》)[《第二維尺寸》]

如對於f7函式定義中的二維陣列引數說明float

c[n],等價於指標引數說明float(*c)[n]。

5.函式型別

當呼叫乙個函式時就執行一遍迴圈體,對於型別為非void的函式,函式體中至少必須帶有一條return語句,並且每條return語句必須帶有乙個表示式,當執行到任一條return語句時,將計算出它的表示式的值,結束整個函式的呼叫過程,把這個值作為所求的函式值帶回到呼叫位置,參與相應的運算;對於型別為void的函式,它不需要返回任何函式值,所以在函式體中既可以使用return語句,也可以不使用,對於使用的每條return語句不允許也不需要帶有表示式,當執行到任一條return語句時,或執行到函式體最後結束位置時,將結束函式的呼叫過程,返回到呼叫位置向下繼續執行。

6.內聯函式

當在乙個函式的定義或宣告前加上關鍵字inline則就把該函式宣告為內聯函式。計算機在執行一般函式的呼叫時,無論該函式多麼簡單或複雜,都要經過引數傳遞、執行函式體和返回等操作。若把乙個函式宣告為內聯函式後,在程式編譯階段系統就有可能把所有呼叫該函式的地方都直接替換為該函式的執行**,由此省去函式呼叫時的引數傳遞和返回操作,從而加快整個程式的執行速度。

通常可把一些相對簡單的函式宣告為內聯函式,對於較複雜的函式則不應宣告為內聯函式。從使用者的角度看,呼叫內聯函式和一般函式沒有任何區別。下面就是乙個內聯函式定義的例子,它返回形參值的立方。

inline

intcube(int

n)如果對您有幫助,請記得採納為滿意答案,謝謝!祝您生活愉快!

vae團隊招人!!!歡迎各位加入!!!走過路過不要錯過!!!迅猛發展中!!!

c語言中返回值是什麼意思?有什麼用

哀吉星 說來話長。c語言中,首先,返回值是函式的返回值 然後,函式的函式名被作為一個變數處理 最後,函式的處理結果資料帶回給呼叫函式作為返回值就被值賦給了 函式名 變數的。這個返回值可以用來判斷函式被呼叫後的執行處理結果,函式細緻的返回值可以判斷出在被呼叫中的走向流程。返回值可有可無。 蘇嘉愛娛樂 ...

c語言中函式呼叫與返回值的關係是什麼

函式呼叫和返回值的關係其實和賦值運算的道理是一樣的只是,函式將計算機過程封裝,實現複雜的計算過程和提供良好的 重用。int sum int arg1,int arg2 函式原型int x x sum 1,3 呼叫函式,其中這裡的1,3我們稱為形式引數,它告訴函式要怎麼做。而函式是負責要做什麼 還是拿...

在c語言中主函式是不是必須要有返回值

main 函式的返回值型別必須是 int 這樣返回值才能傳遞給程式的啟用者 如作業系統 如果 main 函式的最後沒有寫 return 語句的話,c99 規定編譯器要自動在生成的目標檔案中 如 exe 檔案 加入return 0 表示程式正常退出。在c語言標準中強制要求main函式的返回值型別為in...