每日複習筆記4 25

2021-10-06 01:13:43 字數 2845 閱讀 8981

函式的定義

函式由函式名以及一組運算元型別唯一的表示。

函式體是乙個作用域

函式體是乙個語句塊,定義了函式的具體操作,形成了乙個 新的作用域。可以在函式體內定義變數,這種變數是區域性變數,變數名字只在函式內可見。

函式返回型別

函式的返回型別可以是內建型別,類型別或者復合型別(例如引用或者指標),甚至是void型別(即可以沒有返回值)。但是不能返回另乙個函式或者內建型別的陣列。函式必須指定返回值型別

形參列表

形參列表可以為空但是不能忽略。形參表是由一系列用逗號分隔的引數型別和引數名組成,每乙個引數的資料型別必須全部宣告。

c++中每次函式呼叫編譯時都會檢查實參型別。呼叫函式時,對於每乙個實參,其型別都必須與對應的形參型別相同,或者可以轉換成對應形參的型別。

引數傳遞

形參的初始化與變數的初始化一樣:如果形參為非引用型別,則複製實參的值;如果形參為引用型別,則它只是實參的別名。

非引用形參

指標形參

和其他非引用型別一樣,這裡只是賦值指標的值作為區域性變數。實參的值並不會受到函式操作的影響。

consr形參

呼叫函式時,如果該函式之用的是非引用的非const形參,則既可以給該函式傳遞const實參,也可以傳遞非const實參。

如果該函式之用的是非引用的const形參,則既可以給該函式傳遞const實參,也可以傳遞非const實參。和非const型別不同的是,函式中不能修改實參的區域性副本

複製實參的侷限性

複製實參並不是所有情況都適合:

a)當需要在函式中修改實參的值時。

b)當需要以大型物件作為實參傳遞時(因為複製物件消耗比較大)。

c)所傳遞的引數型別無法複製時。

引用形參

如果期望函式修改實參的值就可以使用引用形參

可以使用引用形參返回額外的資訊

因為函式的返回值只能由乙個,但是如果函式有不止乙個內容需要返回,則可以通過定義引用形參的方式儲存資訊。用傳遞進來的實參儲存資訊時候,函式呼叫結束,需要返回的資訊也儲存在引用實參中。

利用const引用避免複製

如果使用引用形參的唯一目的時避免複製(不適合複製實參情況)時,則應該將 形參定義為const引用。既可以避免複製,又可以利用const修飾符避免實參被修改。

應該將不需要修改的引用形參定義為const引用。普通的非const引用形參在使用時不夠靈活。這樣的形參即不能用const物件初始化,也不能用字面值或產生右值的表示式初始化實參。

傳遞指向指標的引用

有如下函式的定義:

//交換傳入的兩個指標的值

void

ptrswap

(int

*&v1,

int*

&v2)

其中形參 int *&v1要從右到左理解,首先v1是乙個引用,這個變數與指向int型物件的指標相關聯。

陣列形參

陣列是不可以被整體複製的,而且在使用陣列名字時,這個名字會自動轉化為指向第乙個元素的指標。由於這兩點特性,我們一般通過操縱指向陣列中的元素的指標來處理陣列。

陣列形參的定義

可以使用一下三種方式執行陣列形參:

void

print

(int*)

;void

print

(int

);void

print

(int[10

]);

這三種定義是等價的,形參型別都是int*。

形參的長度會引起誤解

當編譯器檢查陣列形參關聯的實參時,他只會檢查實參是不是指標、指標型別和陣列元素的型別是否匹配,而不會檢查陣列長度。

陣列實參

一般來說,陣列以普通的非引用型別傳遞。在傳遞陣列時,實參是指向陣列第乙個元素的指標,形參複製的是這個指標的值,而不是陣列元素本身。函式操作的時這個指標的副本,所以不是修改指標本身的值,但是可以用過這個指標修改指標所指向的陣列元素的值。

通過引用傳遞陣列

如果形參是陣列的引用,則編譯器不會將陣列實參轉化為指標,二十傳遞陣列的引用本身。在這種情況下,編譯器會檢查陣列實參的大小和形參的大小是否匹配。

void

printarray

(int

(&arr)[10

]);

這個函式就會嚴格地接受含有10個int型資料的陣列。

函式宣告

函式宣告由函式返回型別、函式名和形參列表。這三個元素被稱為函式原型

預設實參

預設實參是通過給形參表中的形參提供明確的初始值來指定的。

如果給該函式中形參提供預設值,則定義在該形參前面的形參也要提供預設值。

string screen

(size_type height =24,

size_type width =80,

char background =

' ')

;

就上面這個函式的宣告,如果給background提供了實參,也必須給height和width提供實參。

每日複習筆記

未知數量輸入的解決辦法 利用whlie迴圈 讀入位置數量的輸入 include using namespace std int main cout sum is sum 注意 一般windows系統的檔案結束符是ctrl z unix系統中是 control d。標頭檔案的小細節 標準庫的標頭檔案用...

每日複習筆記4 28

感覺這個部分真的是重難點啊,用好的真好用,用不好是,哎,我是菜雞。有乙個順序容器和順序容器介面卡的概念,這裡先寫點關於順序容器的吧。常見的順序容器有vector list和deque三種。順序容器的定義 所有的容易都是類模板,通過模板可以編寫乙個類定義,而用於多個不同的資料型別。容器元素的初始化 表...

每日複習筆記5 3

關聯容器支援通過鍵來高效的查詢和讀取元素。有兩種基本的關聯容器型別 map和set。pair型別 表示式功能 pairp1 建立乙個空的pair物件,它的兩個元素分別是ti和t2型別的,採用值初始化。pairp1 v1,v2 建立乙個pair物件,它的兩個元素分別是ti和t2型別的,first成員初...