C Primer第五版之第6章 函式

2021-09-21 07:34:31 字數 3088 閱讀 7607

雖然不能以值傳遞的方式傳遞陣列,但是我們可以把形參寫成類似陣列的形式,eg:

void print(const int*);

void print(const int );

void print(const int[10]);//這裡的維度表示我們期望陣列含有多少元素,實際上不一定.

// 標記指定陣列長度(要求陣列本身包含乙個結束標記)

void print(const char *p);

// 標準庫規範(傳遞指向陣列首元素和尾元素的指標)

void print(const int *beg, const int *end);

// 傳遞乙個表示陣列大小的實參(專門定義乙個表示陣列大小的形參)

void print(const int a, size_t size);

// 陣列形參和const(通常定義成指向const的指標,當函式要改變元素值時,才定義成指向非常量的指標

// 陣列引用形參

void print(int (&arr)[10]);

// 傳遞多維陣列

void print(int (*martix)[10], int rowsize);

// initializer_list形參(用於表示某種特定型別的值的陣列)類似容器vector

void error_msg(initializer_listil);

f(int &arr[10]); //錯誤,將arr宣告為引用的陣列

f(int (&arr)[10]); //正確,arr是具有10個整型的整形陣列的引用

void print(int (*matrix)[10],int rowsize);

int *matrix[10]; //十個指標構成的陣列

int (*matrix)[10]; //指向含有十個整數的陣列指標

initializer_listlst; //預設初始化,t元素型別的空列表

initializer_listlst; //lst的元素和初始值一樣多,lst的元素是對初始值的const副本

lst2 = lst;

lst2(lst); //拷貝列表,拷貝後原始列表和副本共享元素

lst.size();

lst.begin();

lst.end();

void error_msg(initializer_listil)

; //返回乙個空列表,此時process函式返回的vector物件是空的

// 在不同情況下函式返回的vector物件分別用兩個或三個元素進行初始化

else if (expected == actual)

return ;

else

return ;

}

typedef int arrt[10]; //arrt是乙個別名,表示含有10個整數的陣列

arrt* func(int i); //func返回乙個指向含有10個整型的陣列的指標

使用decltype

int odd = ;

int even = ;

//返回乙個指標,該指標指向含有5個整數的陣列

decltype(odd) *arrptr(int i)

record lookup(phone);

record lookup(const phone);

record lookup(phone *);

record lookup(phone *const);

record lookup(account&);

record lookup(const account&);

record lookup(account*);

record lookup(const account*);

//const_cast和過載

//引數和返回型別均為const string引用

//我們可以對兩個非常量的string實參引用呼叫這個函式,但返回結果仍然是const string引用

const string &shortstring(const string &s1, const string &s2)

//實參為非常量引用,返回結果為普通引用

string &shortstring(string &s1, string &s2)

typedef string::size_type sz;

string screen(sz, sz, char = ' '); //正確,宣告函式預設實參

string screen(sz, sz, char = '*'); //錯誤,重複宣告

string screen(sz = 24, sz = 80, char); //正確,新增預設實參

// wd、def、ht的宣告必須出現在函式外

typedef string::size_type sz;

sz wd = 80;

char def = ' ';

sz ht();

string screen(sz = ht(), sz = wd, char = def);

void f2()

inline const string &shortstring(const string &s1, const string &s2)

一般來說,內聯機制用於優化規模較小、流程直接、頻繁呼叫的函式。

constexpr函式

把內聯函式和constexpr函式定義標頭檔案內。

#includeassert(expr);

c primer 第五版 第6章知識總結

第6章知識總結 while語句的注意點 使用關係運算子和表示式 真值的問題 新的 bool型別 關係運算子的優先順序 不確定迴圈與計數迴圈 更多賦值運算子 逗號運算子 do while 選擇哪種迴圈 陣列 使用函式返回值的迴圈示例 假定你想要跳過輸入知道第乙個部位空格或數字的字元時,你可以使用這樣的...

C primer 第五版)第1章習題答案

初學c primer,記錄整理,使用ubuntu14.04和gnu編譯器,答案參考於github 第一章 開始 1.1 檔案命名約定 參考這裡 gcc 5.4 標頭檔案字尾 h,hh,hpp,h,tcc for shared template code 原始檔字尾 cp,cpp,cpp,c,cc,c...

c primer 第五版課後習題 第五章

第五章主要講了函式 include include include include using namespace std void test 5 9 std cout 母音字母個數為 t cnt endl void test 5 10 std cout 母音字母a的個數為 t cnt a endl...