1樓:哀吉星
說來話長。c語言中,首先,返回值是函式的返回值;然後,函式的函式名被作為一個變數處理;最後,函式的處理結果資料帶回給呼叫函式作為返回值就被值賦給了(函式名)變數的。這個返回值可以用來判斷函式被呼叫後的執行處理結果,函式細緻的返回值可以判斷出在被呼叫中的走向流程。
返回值可有可無。
2樓:蘇嘉愛娛樂
一個函式的函式名既是該函式的代表,也是一個變數。由於函式名變數通常用來把函式的處理結果資料返回給呼叫函式,即遞迴呼叫,所以一般把函式名變數稱為返回值,函式的返回值型別是在定義函式時指定的。
函式可以有返回值,也可以沒有返回值。
1、沒有返回值的函式:功能只是完成一個操作,應將返回值型別定義為void,函式體內可沒有return語句。
2、有返回值的函式:函式的最後會有一個返回值return,可以用來獲取該函式執行結果返回給該函式,讓外部呼叫該函式的。
一個函式的函式名既是該函式的代表,也是一個變數。由於函式名變數通常用來把函式的處理結果資料返回給呼叫函式,即遞迴呼叫,所以一般把函式名變數稱為返回值,函式的返回值型別是在定義函式時指定的。
擴充套件資料
c程式中的print函式:
是這樣寫的:printf("%d\n",printf("%d",printf("%d",i)));
一共有三個printf函式,我們可以使用一些代號來簡化這個printf函式,如下:
代號a: printf("%d",printf("%d",i));
代號b: printf("%d",i)
則c程式**可以簡化為:printf("%d\n",a); 那麼我們就先來求a。而a,又可以簡化為:printf("%d",b);那麼就先來求b。
b是 printf("%d",i),列印出「123」,即在c語言執行結果中,你最先看到的是123。c語言printf函式的返回值是printf實際控制輸出的字元數,那麼列印的123 就是3個字元,因此printf("%d",i)返回的就是3,也就是b是3。
那麼,a就可以寫為printf("%d",printf("%d",3));列印出3,即在執行結果中,你緊接著會看到3。
而列印出的3是1個字元,因此a就是1,那麼printf("%d\n",a); 實際上就是printf("%d\n",1); 列印出1。
c語言中,返回值是什麼意思
3樓:敖子鹿妍晨
在一個函式定義中,函式體之前的所有部分稱為函式頭,它給出了該函式的返回型別、每個引數的次序和型別等函式原型資訊,所以當沒有專門給出函式原型說明語句時,系統就從函式頭中獲取函式原型資訊。
一個函式的原型語句就是其函式頭的一個拷貝,當然要在最後加上語句接上結束符分號。函式原型語句與函式頭也有細微的差別,在函式原型語句中,其參數列中的每個引數允許只保留引數型別,而省略引數名,並且若使用引數名也允許與函式頭中對應的引數名不同。
全文如下:
一)、定義格式
《型別名》
《函式名》
([《參數列》])
《函式體》
《型別名》為系統或使用者已定義的一種資料型別,它是函式執行過程中通過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語言中返回值是什麼意思?有什麼用?
返回值可以是包括指標在內的任何型別,一般跟所定義的函式型別一致,如果沒有返回值,函式型別應為void 比如一個計算一個數的絕對值的函式 返回值就是將這個數的絕對值返回的 返回值的作用就是返回一個值 c語言中返回值是什麼意思?有什麼用?5 說來話長。c語言中,首先,返回值是函式的返回值 然後,函式的函...
c語言中,函式返回值怎麼用,c語言中呼叫函式如何返回多個值?
斑駁丶4129仉 一般用0表示函式執行正確,正常返回 用負數表示函式執行出錯,每個值可以提前定義,根據出錯的值進行出錯處理。誠心為您解答每一個問題!如您滿意請採納最佳!如有疑問請繼續追問!您的好評是我們前進的動力,相互幫助,一起進步! return後接一個值。在呼叫這個函式的函式裡面,呼叫它的時候希...
C 中的返回值是什麼,C 中的返回值是什麼
溫啟勇思 首先,c語言中的函式有兩種形式 1 有返回值,2 無返回值。有返回值的函式會把執行的結果 也就是你寫這個函式的目的 返回到主函式中。沒有返回值的函式主要是為了完成某種任務 其實這是廢話,函式的功能就是為了完成某種任務。而一般沒有任何值返回到主函式中 也可以通過在無返回值的函式中操作全域性變...