目錄
第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. 通過指針調用函數