C Primer 第六章 函式

2021-09-26 18:44:38 字數 2408 閱讀 9282

1.1 區域性變數

1.2 函式宣告

1.3 分離式編譯

2.引數傳遞

2.2 傳引用引數

2.3 const 形參和實參

2.4 陣列形參

2.5 main:處理命令列選項

2.6 含有可變形參的函式

3. 返回型別和 return 語句

3.3 返回陣列指標

4. 函式過載

4.1 過載和作用域

5. 特殊用途語言特性

5.2 內聯函式和constexpr函式

5.3 除錯幫助

6. 函式匹配

6.1 實參型別轉換

7. 函式指標

函式是乙個命名了 **塊,通過呼叫函式來執行相應的**。函式有0個或者多個引數,而且通常會產生乙個結果。可以過載函式。

乙個典型的函式(function)定義包括以下部分:

返回型別(return type)

函式名字

0個或者多個形參(parameter)組成的列表

函式體(function body)

實參是形參的初始值。

實參的型別必須和對應的形參匹配。

形參列表中的形參通常用逗號隔開,其中每個形參都有乙個宣告符的宣告。即使兩個形參的型別一樣,也必須把兩個型別寫出來:

int f3(int v1, v2) //錯誤

int f4(int v3, int v4) //正確

名字 – 作用域

物件 – 生命週期

形參和函式體內d定義的變數都稱為區域性變數(local variable)

只存在於塊執行期間的物件稱為自動物件(automatic object)

形參是一種自動變數。函式開始時為形參申請儲存空間,因為形參在函式體作用域之內,所以一旦函式終止,形參也自動被銷毀

函式的名字也必須在使用之前宣告

函式只能定義一次,但可以多次宣告

函式的三要素(返回型別,函式名,形參型別)描述了函式的介面,說明了呼叫該函式所需的資訊

函式宣告也叫函式原型(function prototype)

一般建議:變數和函式都應該在標頭檔案中宣告,在原始檔中定義

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

形參的型別決定了形參和實參的互動方式

如果形參是引用型別,它將繫結到對應的實參上

否則實參的值拷貝後賦值給形參

函式對形參的所有操作都不會影響到實參

執行指標拷貝操作時,拷貝的是指標的值。拷貝之後,兩個指標式不同的指標。

對引用的操作實際上是作用在引用所引的物件上

拷貝大的類型別物件或者容器物件比較低效,甚至有些類型別物件根本不支援拷貝操作

陣列的兩個特殊特性:

不允許拷貝陣列

使用陣列時將其轉換為指標。

因為陣列會被轉換為指標,所以但我們為函式傳遞乙個陣列時,實際上傳遞的是指向陣列首元素的指標

管理指標形參的三種常見技術:

命令選項通過兩個(可選的)形參傳遞給main函式:

int main( int argc, char *ar**[ ])

第乙個形參argc表示陣列中字串的數量,

第二個形參ar**是乙個陣列,它的元素是指向c風格字串的指標

也可以寫成:

int main( int argc, char **ar**)

ar**是指向 char *

當使用ar**中的實參時,可選的實參是從==ar**[1]==開始,ar**[0]儲存程式的名字,而不是使用者的輸入

如果一作用域內的幾個函式名字相同但形參列表不同,我們稱之為過載(overload)函式

待補充

第六章閱讀出現困難 好多概念開始混淆 有點繼續不下去下面的章節

很多不懂的都是跳著看了

C Primer 第六章 函式

1.實參 argument 是形參 parameter 的初始值。第乙個實參初始化第乙個形參,以此類推 2.c 中,名字有作用域,物件有宣告週期 lifetime 3.形參和函式體內部定義的變數統稱為區域性變數 local variable 4.自動物件 automatic object 只存在於塊...

c primer 筆記 第六章 函式

1.函式的返回型別不能是陣列型別或函式型別,但可以是指向陣列或函式的指標 返回陣列的指標 1 使用型別別名 typedef int arrt 10 using arrt int 10 與上面的宣告等價 arrt func int i 2 直接宣告 int func int i 10 3 使用尾置返回...

C Primer 筆記 第六章 函式

函式的呼叫完成兩項工作 一是用實參初始化形參,二是將控制權轉移給被呼叫函式。函式最外層作用域中的區域性變數也不能使用與函式形參一樣的名字。形參和函式體內定義的變數都是區域性變數。普通的區域性變數只存在於其定義所在塊的執行時間內,內建型別的未初始化的區域性變數將產生未定義的值。區域性變數在程式第一次經...