第6章 6 1 函式基礎

2021-09-13 12:24:18 字數 2516 閱讀 5858

6.1.2 函式宣告

​ 乙個典型的函式定義包括以下幾個部分:返回型別函式名字、由0個或多個形參組成的列表以及函式體。其中,形參以逗號隔開,形參列表位於一對圓括號之內。

​ 函式的呼叫完成兩項工作:

(1)用實參初始化函式對應的形參;

(2)將控制權轉移給被調函式。此時主調函式的執行被中斷,被調函式開始執行。

舉個例子:

int function(int a) 

return t;

}int main()

上例中,執行函式的第一步是(隱式地)定義並初始化形參列表。因此,當呼叫 function 函式時,首先建立乙個名為 a 的 int 變數,然後將它初始化為呼叫時所用的實參 5.

​ 函式的形參列表可以為空,但是不能省略。

​ 要想定義乙個不帶形參的函式,可以使用兩種方法:書寫乙個空的形參列表、使用關鍵字 void 表示函式沒有形參:

// 空列表

void function1() {}

// 使用關鍵字void

void function2(void) {}

形參函式體內部定義的變數統稱為區域性變數。區域性變數僅在函式的作用域內可見,同時區域性變數會隱藏在外層作用域中同名的其它所有宣告中。

在所有函式體之外定義的物件存在於程式的整個執行過程中。此類物件在程式啟動時被建立, 直到程式結束才銷毀。

【自動物件】

​ 對於普通區域性變數對應的物件來說,當函式的控制路徑經過變數定義語句時建立物件,當到達定義所在的塊末尾時銷毀它,這種只存在於塊執行期間的物件稱為自動物件。當塊執行結束後,塊中建立的自動物件的值就變成未定義的

​ 函式的形參是一種自動物件:函式開始時為形參申請儲存空間;因為形參定義在函式體作用域之內,所以一旦函式終止,形參就會被銷毀。

自動物件的初始化分為下面幾種情況:

(1)形參對應的自動物件:用傳遞給函式的實參來初始化形參對應的自動物件;

(2)區域性變數對應的自動物件:

​ a. 如果變數定義本身含有初始值,就用這個初始值進行初始化;

​ b. 如果變數定義本身不含初始值,則執行預設初始化(內建型別的未初始化區域性變數將產生未定義的值)。

【區域性靜態物件】

​ 將區域性變數定義成static型別,就可以令區域性變數生命週期貫穿函式呼叫及之後的時間。區域性靜態物件在程式執行路徑第一次經過物件定義語句時初始化( **只初始化一次 **),並且直到程式終止才被銷毀,在此期間即使物件所在的函式結束執行也不會對它有影響如果區域性變數沒有被初始化,它將執行值初始化(內建型別的區域性靜態變數初始化為0)。

​ 例如:

void display() 

int main()

return 0;

}// 這段程式將輸出從 1 到 10 的數字

​ 函式的名字必須在使用之前進行宣告。類似於變數,函式只能定義一次,但可以宣告多次。如果乙個函式永遠不會被用到,則可以只有宣告沒有定義

​ 函式的宣告與函式的定義非常類似,唯一的區別是 函式宣告無須函式體,用乙個分號替代即可*。因為函式的宣告不包含函式體,因此也就無需形參的名字。函式宣告也稱為函式原型

​ 例子:

void display(int); // 函式宣告

int main()

return 0;

}void display(int i)

【在標頭檔案中進行函式宣告】

​ 函式應該在標頭檔案中宣告,在原始檔中定義。​

​ 要注意的是,定義函式的標頭檔案應該被包含到定義函式的原始檔中,編譯器負責驗證函式的定義和宣告是否匹配。

第 6章 函式

6.1.2引數 2.引數陣列 c 允許為函式指定乙個 只能乙個 特殊的引數,這個引數必須是函式定義中的最後乙個引數,可用params關鍵字定義他們 如 params int vals 3.引用引數和值引數 理解 將本來在函式中引數按值引用的規則改變成按傳遞引用,使得這個引數會改變,定義引數和傳遞引數...

第6章 函式

1.自動物件 只存在於塊執行期間的物件 2.區域性靜態物件static 在程式執行路徑第一次經過物件定義語句時初始化,並且知道程式終止才被銷毀,如果區域性靜態變數沒有顯示的初始值,初始化為0.3.如果函式無須改變引用形參的值,最好將其生命為常量引用。4.使用引用形參返回額外資訊 5.和其他初始化過程...

第6 章函式

必背必記 1.建立函式 建立函式使用def關鍵字實現,具體的語格式如下 def functionname parameterlist comments functionbody 引數說明 functionname 函式名稱,在呼叫函式時使用。parameterlist 可選引數,用於指定向函式中傳遞...