1樓:墨汁諾
函式定義時的引數為:形參
函式呼叫語句中的引數稱為:實參
實現函式時,如果有引數,則要寫明引數:
int plus(int a,int b)return (a+b);
void fun(void)
但要注意,此時的引數名是“形參”,名字可以隨便起,與呼叫時不必一樣,但型別要一樣!個數也應該相同。還有各個型別的排列順序也要一致!
例如宣告時:int function(float,double);則實現時double型別也要在float型別之後:int function(float f,double d){}
函式實參:函式作為另一個函式呼叫的實際引數出現。這種情況是把該函式的返回值作為實參進行傳送,因此要求該函式必須是有返回值的。
例如: printf("%d",max(x,y)); 即是把max呼叫的返回值又作為printf函式的實參來使用的。在函式呼叫中還應該注意的一個問題是求值順序的問題。
所謂求值順序是指對實參表中各量是自左至右使用呢,還是自右至左使用。
2樓:匿名使用者
函式定義時的引數為:形參
函式呼叫語句中的引數稱為:實參
3樓:匿名使用者
實參 設為最佳吧
4樓:匿名使用者
,它給出了該函式的返回型別、每個引數的次序和型別等函式原型資訊,所以當沒有專門給出函式原型說明語句時,系統就從函式頭中獲取函式原型資訊。
一個函式的原型語句就是其函式頭的一個拷貝,當然要在最後加上語句接上結束符分號。函式原型語句與函式頭也有細微的差別,在函式原型語句中,其參數列中的每個引數允許只保留引數型別,而省略引數名,並且若使用引數名也允許與函式頭中對應的引數名不同。
全文如下:
一)、定義格式
《型別名》 《函式名》 ([《參數列》]) 《函式體》
《型別名》為系統或使用者已定義的一種資料型別,它是函式執行過程中通過return語句要求返回的值的型別,又稱為該函式的型別。當一個函式不需要通過return語句返回一個值時,稱為無返回值函式或無型別函式,此時需要使用保留字void作為型別名。當型別名為int時,可以省略不寫,但為了清楚起見,還是寫明為好。
《函式名》是使用者為函式所起的名字,它是一個識別符號,應符合c++識別符號的一般命名規則,使用者通過使用這個函式名和實參表可以呼叫該函式。
《參數列》又稱形式參數列,它包含有任意多個(含0個,即沒有)引數說明項,當多於一個時其前後兩個引數說明項之間必須用逗號分開。每個引數說明項由一種已定義的資料型別和一個變數識別符號組成,該變數識別符號成為該函式的形式引數,簡稱形參,形參前面給出的資料型別稱為該形參的型別。一個函式定義中的《參數列》可以被省略,表明該函式為無參函式,若《參數列》用void取代,則也表明是無參函式,若《參數列》不為空,同時又不是保留字void,則稱為帶參函式。
《函式體》是一條複合語句,它以左花括號開始,到右花括號結束,中間為一條或若干條c++語句。
在一個函式的參數列中,每個引數可以為任一種資料型別,包括普通型別、指標型別、陣列型別、引用型別等,一個函式的返回值可以是除陣列型別之外的任何型別,包括普通型別、指標型別和引用型別等。另外,當不需要返回值時,應把函式定義為void型別。
二)、定義格式舉例
(1) void f1()
(2) void f2(int x)
(3) int f3(int x,int* p)
(4) char* f4(char a)
(5) int f5(int& x,double d)
(6) int& f6(int b[10], int n)
(7) void f7(float c[n], int m, 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)
int f12(int a, char op='+', int k=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);
int f12(int a, char op='+', int k=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 int cube(int n)
在呼叫函式時,函式是怎樣傳值的,c語言函式呼叫時,實參和形參是如何傳遞的?什麼時候要寫指標型變數?求高手指點
毋惜苼 在c語言中,實參將值傳給函式中的形參,實現了自上而下的值傳遞,就可以呼叫函式了。舉個淺顯一點的例子吧 include void main int swap int x,int y 在主函式中,將實參a,b的值傳遞給被呼叫函式中的形參x,y,即將a,b分別代入x,y中計算,即達到了呼叫的目的。...
c 為什麼需要把重新定義的函式定義為虛擬函式
聚發稿網 1不是不能定義,是定義了沒意義。因為建構函式不被繼承,而虛擬函式是要在派生類中重定義的2定義虛解構函式後,由於多型,當使用基類指標指向派生類物件時,會呼叫派生類的虛構函式,然後派生類的解構函式自動呼叫基本解構函式。不是虛的話,直接呼叫基類的解構函式了。如果派生類中有用new分配的記憶體,就...
已知函式f x 的定義域為f x 為f x 的導函式,函式y f x 的影象如右圖所示
由圖知,x 0,f 0,f單減 x 0,f 0,f單增 x 0,f 0,f極大 f 0 x 0,f 0,f單減 x 2 6 0,f x的平方 6 1 f 3 x 2 6 3 60,f單增 x 2 6 0,f x的平方 6 1 f 2 x 2 6 2 6 綜上所述 6 由f x 的影象可以看出,f x...