-----------------------
--1-- 自定義函數定義1.1 無參無返回值函數1.2 無參有返回值函數1.3 有參無返回值函數1.4 有參有返回值函數--2-- 函數的參數2.1 形式參數介紹和使用2.2 實際參數介紹和使用2.3 函數的參數傳遞過程--3-- 函數的聲明及調用3.1 函數的聲明3.2 函數的調用-----------------------
【寫在開頭:】
自定義函數分為:
無參無返回值函數
無參有返回值函數
有參無返回值函數
有參有返回值函數
書寫格式:
返回值類型 函數名稱(函數參數){
函數體;
}
函數從定義到使用分三步:1、聲明 2、定義函數 3、調用函數
』
定義格式
一般形式:
void 函數名(){
聲明部分; //定義局部變量
語句;
}
如:
void sum(){ //語句 }
定義格式
一般形式:
返回值類型 函數名(){
聲明部分;
語句;
return 返回值類型:變量或常量;
}
如:
int sum(){ return 1 + 2; }
定義格式
一般形式:
void 函數名(形式參數表列){
聲明部分;
語句;
}
如:
void sum(int x, int y){ //運算 }
定義格式
一般形式:
返回值類型 函數名(形參){
聲明部分;
語句;
return 返回值類型變量或常量;
}
如:
int sum(int x, int y){ //運算 return x + y; }
定義函數的時候,函數名後面小括號中的參數,簡稱行參。
/** * 自定義sum函數 * * @param x 形參1 * @param y 行參2 * * @return 返回運算結果 */ int sum(int x, int y){ //運算 return x + y; }
注意:
1)形參定義後,並不會立即分配空間
在函數被調用的時候才會真正的分配存儲空間
2)如果有多個形參,則用逗號“,”隔開
3)形參的類型可以不相同
4)在函數中不能定義和形參同名的變量
形參只出現在函數定義中,在整個函數體內部都可以使用,離開函數則不能再使用。
調用函數時,函數名後面小括號的參數,簡稱實參。
實參出現在主調函數中,進入被調函數後,實參變量也不能使用。
形參和實參的功能是作數值的傳遞。發生函數調用時,主調函數把實參的值傳送給被調函數的形參,從而實現主調函數向被調函數數據的傳送。
int main(int argc, const char * argv[]) { int sum(int x, int y); //函數聲明 int result = sum(3, 5); //此處3, 5是實參 return 0; } /** * 自定義sum函數 * * @param x 形參1 * @param y 行參2 * * @return 返回運算結果 */ int sum(int x, int y){ //運算 return x + y; }
注意:
實參可以是變量,也可以是常量,也可以是表達式。
主調函數和被調函數是相對而言的。
1)形參變量只有在被調用時才分配存儲空間,在調用結束時,即刻釋放所分配的內存單元。
2)實參可以是常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,他們都必須具有確定的值,以便把這些值傳遞給形參。
因此應預先用賦值,輸入等方法使實參獲得確定的值。
3)實參和形參在數量、類型、順序上應嚴格一致。
在主調函數中,調用某被調函數之前應對該被調函數進行說明(聲明)。如果不進行聲明,則要將被調函數寫在主調函數上方。
一般形式:
返回值類型 被調函數名(類型 形參,類型 形參…);
或
返回值類型 被調函數名(類型,類型…);
int sum(int x, int y); //函數聲明
一般形式為:
函數名 (實參表列);
int result = sum(3, 5); //調用sum(int, int)函數
注意:
1)函數表達式
函數作為表達式中的一項出現在表達式中
m = max(34,10)+10;
2)函數調用作為另外一個函數的實參
3)函數的嵌套調用
max(max(34, 44), 299);
4)函數名不能和變量名同名
int sum = sum(3, 5); //錯 函數名不能和變量名同名
【寫在結尾:】
『封裝,作為面向對象的四大特性之一,隱藏了代碼的內部細節,提供一個對外的接口。C語言雖然是一個面向過程的語言,但是可以將一些常用的自定義函數合成一個自己的工具類,方便重用』