天天看點

c++primer plus 6 讀書筆記 第七章 函數--C++的程式設計子產品

目錄

​​第7章 函數--C++的程式設計子產品​​

​​7.1 複習函數基本知識​​

​​7.1.1 定義函數​​

​​7.1.2 函數原型和函數調用​​

​​7.2 函數參數和按值傳遞​​

​​7.2.1多個參數​​

​​7.3函數和數組​​

​​7.3.1函數如何使用指針來處理數組​​

​​7.3.2 将數組 作為參數傳遞,實際上傳遞了數組的位址值。​​

​​7.3.4 使用數組區間的函數​​

​​7.3.5 指針和const​​

​​7.4 函數和二維數組​​

​​7.5函數和C-風格字元串​​

​​7.6函數和結構​​

​​7.6.1 傳遞和傳回結構​​

​​7.6.3傳遞結構的位址​​

​​7.7函數和string對象​​

​​7.8函數和array對象​​

​​7.9 遞歸​​

​​7.10 函數指針​​

​​7.10.1 函數指針的基礎知識​​

​​7.10.2​​

​​7.10.3深入探讨函數指針​​

​​7.10.4 typedef 建立類型别名​​

第7章 函數--C++的程式設計子產品

7.1 複習函數基本知識

7.1.1 定義函數

無傳回值的函數。

void functionName(parameterList)

{

 statement(s)

return; //optional,可寫可不寫

}

有傳回值的函數

typyName functionName(parameterList)

{

statement(s)

return value;

}

執行完第一個return結束。

7.1.2 函數原型和函數調用

函數原型描述了函數到編譯器的接口。

函數原型的文法:

最簡單的做法:複制函數定義中的函數頭添加分号。

7.2 函數參數和按值傳遞

普通的函數調用時傳遞的是變量值,而不是變量本身。

7.2.1多個參數

多個參數隻需要 用,分開即可

注意對應順序。

7.3函數和數組

7.3.1函數如何使用指針來處理數組

大多數情況下C++将數組名視為指針。

但是也有一些例外。

一般傳遞數組參數使用 (int array[],int n) 這樣的格式

雖然,(int * array, int n)也可。

7.3.2 将數組 作為參數傳遞,實際上傳遞了數組的位址值。

也就是說,函數可以(通過位址)修改、使用原始數組的值。

為了防止惡意破壞原始數組,可以用const字首保護數組(禁止修改)。

E:  void show_array(const double ar[], int n);

7.3.4 使用數組區間的函數

傳遞兩個指針(開頭最後)确定數組元素區間(range)

7.3.5 指針和const

const和指針有一些微妙之處。

常用的格式:

const int *pt = &age; pt是個指向const int 的指針,意味此值是固定的,無法使用pt修改,但是pt本身是個普通指針,pt的值可以修改(如指向其他變量,pt=&sage;)

int * const ps = & sloth;

ps指針是固定的(不可修改),而它指向的元素是普通元素(可以修改)。

7.4 函數和二維數組

常用的格式

int sum(int ar2[][4], int size);

7.5函數和C-風格字元串

字元串傳遞參數都是傳遞char指針(char*)。

傳回字元串是靠傳回字元串的位址。當該字元串不再需要時,使用delete[] 釋放記憶體。

7.6函數和結構

7.6.1 傳遞和傳回結構

類似基本類型。

如定義了一個struct time

可以把time當成int一樣,

time sum(time t1, time t2);

7.6.3傳遞結構的位址

傳遞結構位址(指針),

使用->通路成員。

可以使用const保護

7.7函數和string對象

與結構相似。

7.8函數和array對象

E:聲明

void show(std::array<double, 4>  da);

void fill(std::array<double, 4> *pa);

調用:

show(expense);

fill(&expense);

7.9 遞歸

函數自身可以調用自身。

E:

void recurs(argumentlist)

{

statements1

if(test)

  recurs(arguments)

statements2

}

7.10 函數指針

7.10.1 函數指針的基礎知識

1.擷取函數位址

函數名即函數位址。

2. 聲明函數指針

指定指針指向的類型,參數清單

double pam(int );

double (*pf)(int);

實際上,将函數名換為(*pf)即可聲明函數指針。

3. 通過指針調用函數

7.10.2

7.10.3深入探讨函數指針

7.10.4 typedef 建立類型别名