c primer 函式部分總結

2021-08-15 13:27:55 字數 1890 閱讀 7114

1,實參是函式形參的初始值,函式的每次呼叫都要經歷形參的初始化過程(每次呼叫函式都會重新建立它的形參),並且實參的數量必須與形參相匹配或者實參的型別能轉換成形參的型別。

2,函式的返回型別不能使陣列和函式,但是可以是函式的指標和指向陣列的指標,返回型別可以是void。

3,形參(也定義與函式體內部)和函式體內部定義的變數稱為區域性變數,同時區域性變數還會隱藏在外層作用域中的同名的其他所有宣告,區域性變數的宣告週期依賴於定義的方式,如果要讓區域性物件在函式呼叫結束以後還能存在,並且維持到直到程式結束,可以將區域性變數定義成static型別(static如果沒有顯示的初始化,它將執行值初始化,內建型別的區域性靜態變數初始化為零)

4,函式必須在使用之前進行宣告,函式宣告三要素(函式名,返回型別,形參列表),函式宣告最好包含在標頭檔案中。

5,如果形參是引用型別(引用),它將繫結到對應的實參上,否則將實參的值拷貝後賦給形參。注意,指標形參(當執行指標拷貝操作的時候,拷貝的是指標的值)

**6,盡量使用引用,避免拷貝,因為大的型別拷貝比較消耗資源,而且當函式無需修改引用形參的值得時候,最好將引用形參宣告為常量應用。技巧:可以使用引用形參返回額外的資訊

1,實參初始化形參時,會忽略頂成const(也就是說如果形參是乙個常量,那麼實參可以是常量,也可以是非常量)。

2,我們可以用乙個非常量來初始化乙個底層const物件(也就是說可以用乙個非常量來初始化乙個指向常量的指標或者引用,但是不可以用乙個常量來初始化乙個普通的指標或者普通的引用),而且普通的引用(或者指標)必須使用同型別的物件來初始化。

3,陣列形參

1,陣列有兩個性質,不允許拷貝陣列以及在使用陣列時(通常)會將其轉換成指標,所以當我們為函式傳遞乙個陣列的時候,實際上傳遞的是指向陣列首元素的指標。和一下三個列子一樣:

void print(const int*);

void print(const int);

void print(const int[10]);

注意,使用陣列時必須防止下標越界,因為這將產生未定義的行為。

管理陣列越界的方法

(1)陣列本身包含標記,比如c風格的字串的尾部為/0。

(2)傳遞指向陣列首元素和尾後元素的指標(可以使用begin和end函式)

(3)傳遞乙個指示陣列大小的形參。

2,關於引用的討論適用於指標。

3,關於二維陣列的傳遞

一下兩個傳遞方式是等價的

void print(int (*mat)[10]);

void print(int mat[10]);

最好使用第一種的傳遞多維陣列的方式

如果函式實參的數量未知,但是實參型別的全部相同,我們可以使用標準庫型別(initializer_list,其定義在同名的標頭檔案中)的形參,其定義形式如下:

void error_msg(int a,initializer_listil);
還有一種省略符形參,注意省略符形參只能放在形參列表的最後乙個。

5,不要返回區域性物件的指標或者引用。

6,呼叫運算子也有優先順序和結合律,呼叫運算子的優先順序和點運算子,箭頭運算子(箭頭運算子只能指標使用)相同,且都滿足左結合律

這麼宣告乙個返回陣列指標的函式呢

int (*fun(int i))[10];
auto func(int i)->int(*)[10];

decltype(odd) *func(int i);

定義:如果在同乙個作用域內的幾個函式名字相同,但形參列表不同,我們稱之為過載函式。

1,我們不允許兩個函式除了返回型別外其他所有的要素都相同。

2,乙個擁有頂成const的形參無法和另乙個沒有頂層const的形參區分開來,當然底層const是可以區分的。

C Primer基礎部分總結(2)

東陽的學習記錄 給空語句加上注釋 多餘的空語句並非總是無害的 switch語句中的case標籤必須是整型常量表示式 任何兩個case標籤的值不能相同 case分支後若沒有break,最好注釋說明 如果某個case分支需要定義區域性變數,請把區域性變數置於內 為了防止出現未初始化就使用的情況 whil...

C primer函式部分課後題

6.4 階乘函式 include using namespace std long fact long val int main 6.5 輸出實參絕對值 include include using namespace std double fabs double val int main retur...

C primer 部分術語

c primer 可謂是經典的不能在經典的一本書 這本書的每一章節背後都有些術語,我按順序摘抄了些.以後補全 c primer 術語 第一章 argument 實參 block 塊 buffer 緩衝區 built in type 內建型別 cerr cinclass 類 class type 類型...