C 程式語言讀書筆記 C7 函式

2021-06-08 07:25:30 字數 1415 閱讀 8041

1. 乙個函式的定義也就是乙個給出了函式體的函式宣告

2. inline描述符並不影響函式的語義

3. 如果一區域性變數被宣告為static,那麼將只有乙個靜態分配的物件,它被用於在該函式的所有呼叫中表示這個變數。這個物件將只在執行執行緒第一次到達它的定義時初始化。

4. 將指標引數宣告為const,也就是告知讀者,函式將不修改由這個引數所指的物件

5. 文字量,常量,和需要轉換的引數都可以傳遞給const&引數,但不能傳遞給非const的引用引數

6. 陣列與其他型別不同,陣列不會按值的方式傳遞。對於被呼叫函式而言,陣列引數的大小是不可利用的。

7. 將同乙個名字用於在不同型別上操作的函式的情況成為過載。當乙個函式f被呼叫時,編譯器就必須弄清楚究竟應該呼叫具有名字f的哪乙個函式。為了完成這項工作,它需要將實際引數的型別與所有名字為f的函式的形式引數的型別相比較。基本想法是去呼叫其中的那個在引數上匹配得最好的函式,如果不存在匹配的最好的函式,就給出乙個編譯錯誤。

8. 為了盡可能接近最合理的觀念,需要按順序檢查下面一系列的匹配準則:準確匹配 -> 利用提公升的匹配 -> 利用標準轉換 -> 利用使用者定義轉換 -> 利用在函式宣告中的省略號

9. 過載解析中將不考慮返回型別

10. 在不同的非名字空間作用域裡宣告的函式不算是過載

11. 如果希望過載能夠跨越作用域或名字空間作用域,那麼可以利用「使用宣告」或者「使用指令」

12. 一些c++新手會被編譯器報告出的歧義性錯誤弄得急躁起來。更有經驗的程式設計師則欣賞這種錯誤資訊,將它們看作是很有用的關於設計錯誤的指示器。

13. 預設引數的型別將在函式宣告時檢查,在呼叫時求值。在同乙個作用域中隨後的宣告裡,預設引數都不能重複或者改變。

14. 宣告這種函式的方式是在參數列的最後使用省略號結束,省略號標示「還可能有另外一些引數」。這樣的函式必須依賴於一些編譯時無法使用的資訊區解釋它的參數列。

15. 使用整數0作為結束符可能產生不可移植的問題:在某些實現中,整數0和空指標的表示形式可能不同。

16. 從乙個使用過va_start()的函式中退出之前,必須呼叫一次va_end()。這是因為va_start()可能以某種方式修改了堆疊,這種修改可能導致返回無法完成,va_end()能將有關的修改復原。

練習題:9, 10, 15

9.void ******encrypt()

cout << "please input string to be encrypted: " << endl;

string str, str_encrypted, str_decrypted;

getline(cin, str);

if (key.size() > 0) {

int keyindex = 0;

for (int i=0; i0) {

int keyindex = 0;

for (int i=0; i

《c程式語言》讀書筆記

舉例如下 char a 10 1 定義的時候直接用字串賦值 char a 10 hello 注意 不能先定義再給它賦值,如 char a 10 a 10 hello 這樣是錯誤的!2 對陣列中字元逐個賦值 char a 10 3 利用strcpy char a 10 strcpy a,hello 易...

《C程式語言》 讀書筆記

在mac下可以使用sublime進行c語言程式編寫,然後通過命令列來執行c程式。在sublime新建乙個c程式,譬如 test.c include main 然後在命令列中執行 cc test.c編譯後會自動生成乙個a.out檔案,然後我們執行a.out檔案 test.c就會在命令行內列印出 hel...

C程式語言讀書筆記 5

double dp,atof char 表明,dp 和atof char 的值都是 double 型別的。該宣告中 atof 的引數是指向 char 型別的指標,指標必須指向特性型別的物件,但是 void 型別的指標可以存放指向任何型別的指標。陣列和指標的關係 陣列名所代表的指標就是該陣列最開始的乙...