C Primer 學習筆記 第六章 函式

2021-10-21 06:24:25 字數 3133 閱讀 2015

函式基礎

//乙個典型的函式定義包括一下幾個部分:返回型別、函式名字、形參列表、函式體

.1區域性物件

//在c++語言中,名字有作用域,物件有生命週期

//1.名字的作用域是程式文字的一部分,名字在其中可見。

//2.物件的生命週期是程式執行過程中該物件存在的一段時間。

//自動物件

//當函式的控制路徑經過變數定義語句時建立該物件,當到達定義所在的塊末尾時銷毀它。我們把只存在於

//塊執行期間的物件稱為自動物件。當塊的執行結束後,塊中建立的自動物件的值就變成未定義的了。

//形參是一種自動物件

//區域性靜態物件

//某些時候,有必要令區域性變數的生命週期貫穿函式呼叫及之後的時間。可以將區域性變數定義成static型別從而獲得這樣的物件。

//區域性靜態物件,在程式執行路徑第一次經過物件定義語句時初始化,並直到程式終止時才被銷毀,在此期間即使物件所在的函式結束執行也不會對它有影響

.2函式宣告

.3分離式編譯

引數傳遞

//每次呼叫函式時都會重新建立它的形參,並用傳入的實參進行初始化。

.1傳值引數

//指標形參

.2傳引用引數

.3const形參和實參

.4陣列形參

//實際上傳入的時陣列的首位址

.5main: 處理命令列選項

#include

using

namespace std;

intmain61

(int argc,

char

*ar**)

getchar()

;system

("pause");

return0;

}.6含有可變形參的函式

//initializer_list形參

//如果函式的實參型別未知,但是全部實參的型別都相同,我們可以使用initializer_list型別的形參。

//省略符號形參

//省略符形參是為了便於c++程式訪問某些特殊的c**而設定的,這些**使用了名為varags的c標準庫功能。

返回型別和return語句

.1無返回值的函式

void

swap

(int

&v1,

int&v2)

int tmp = v2;

v2 = v1;

v1 = tmp;

//此處無須顯式的return語句

}.2有返回值的函式

//因為含有不正確的返回值,所以這段**無法通過編譯

//bool str_subrange(const string &str1, const string &str2)

// }

// }

//錯誤,控制流可能尚未返回任何值就結束了函式的執行

//編譯器可能查不出這一錯誤。

//}//值是如何被返回的。

//返回乙個值的方式和初始化乙個變數或形參的方式完全一樣:返回的值用於初始化呼叫點的乙個臨時量,該臨時量就是函式呼叫的結果。

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

//嚴重錯誤:

//const string &manip()

// else

// //}

//返回類 型別的函式和呼叫運算子

//引用返回左值

//列表初始化返回值

#include

"vector"

vector

process()

;}//主函式main的返回值

//0成功,其他失敗

//遞迴,乙個函式返回了它本身即稱之為遞迴

intfactotial

(int val)

return1;

}.3返回陣列指標

函式過載

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

//例如

void

print

(const

char

*p);

void

print

(const

int*p,

const

int*g)

;void

print

(const

int p,

double g)

;特殊用途語言特性

.1預設實參

.2內聯函式和constexptr函式

//內聯函式可以避免函式呼叫的開銷

//constexptr函式是指能用於常量表示式的函式。定義constexptr函式的方法域其他函式類似,不過要有幾點約定

//函式的返回型別及所有形參的型別都是字面值型別,而且函式體中必須有一條return語句。

.3除錯幫助

//assert預處理巨集

//是乙個預處理變數,assert(條件),如果條件為真,則什麼都不做,如果為假,則輸出資訊並終止程式。

//ndebug預處理變數

intmain61()

cerr <<

"x "

;#endif

cout <<

"end\n"

;system

("pause");

return0;

}函式匹配

//確定候選函式和可行函式

//尋找最佳匹配

//含有多個形參的函式匹配

.1實參型別轉換

函式指標

//函式指標指向的是函式而非物件。和其他指標一樣,函式指標指向某種特定型別。

//函式的型別由它的返回型別和形參型別共同決定,與函式名無關。

bool

lengthcomepare

(const string &

,const string &);

bool

(*pf)

(const string &

,const string &);

//使用函式指標

//pf = lengthcomepare;

//pf = &lengthcomepare;

//過載函式的指標

//函式指標形參

//返回指向函式的指標

c primer 筆記,第六章

區域性靜態物件使用static宣告,宣告一次後下次再呼叫該函式,則該宣告語句則被忽略 練習6.7,第一次被呼叫時返回0,以後每次呼叫返回值加一 size t count 當函式無需修改引用形參的值時最好使用常量引用 使用實參初始化形參時會忽略頂層const 使用普通引用會極大地限制函式所能接受的實參...

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 第六章筆記 初稿

用指標來傳遞多維陣列時,仍然需要傳遞二維的具體引數 可變形參 個人感覺就是乙個容器?如下class class1 private int a int b class class2 private int a int b int main class2 c2 1,2 return 0 莫名把賦值與判斷...