C語言總結(3)

2021-09-10 21:33:02 字數 2455 閱讀 3636

1.printf列印函式

(1)%d 按照十進位制整型數列印

(2)%6d 按照十進位制整型數列印,至少 6 個字元寬

(3)%f 按照浮點數列印

(4)%6f 按照浮點數列印,至少 6 個字元寬

(5)%.2f 按照浮點數列印,小數點後有兩位小數

(6)%6.2f 按照浮點數列印,至少 6 個字元寬,小數點後有兩位小數

此外,printf 函式還支援下列格式說明:%o 表示八進位制數;%x 表示十六進製制數;%c

表示字元;%s 表示字串;%%表示百分號(%)本身

2.自增與自減運算子只能作用於變數,類似於表示式(i+j)++是非法的。

3.什麼是預編譯,何時需要預編譯?

(1)預編譯又稱為預處理,是做些**文字的替換工作。

(2)總是使用不經常改動的大型**體;程式由多個模組組成,所有模組都使用一組標準的包含檔案和相同的編譯選項。在這種情況下,可以將有包含檔案預編譯為乙個預編譯頭。

4.布林變數與零值比較

不可將布林變數直接與 true 、false 或者 1 、0 進行比較。為根據布林型別的語義,零值為「假」 (記為 false ) ,任何非零值都是「真」 (記為true ) 。true 的值究竟是什麼並沒有統一的標準。例如 visual c++ 將 將 true 定義為1,而 visual basic 則將 true 定義為-1 。

5.浮點變數與零值比較

無論是 float 是 還是 double 型別的變數,都有精度限制。所以一定要避免將浮點變數用「 == 」或「!= = 」與數字比較,應該設法轉化成「 >= 」或「 <=」。

6.指標變數與零值比較

應當將指標變數用「 == 」或「!= = 」與 null比較。指標變數的零值是「空」 (記為 null ) 。儘管 null 的值與0相同,但是兩者意義不同。

7.迴圈效率

(1)在多重迴圈中,如果有可能,應當將最長的迴圈放在最內層,最短的迴圈放在最外層,以減少cpu 跨切迴圈層的次數。

(2)如果迴圈體內存在邏輯判斷,並且迴圈次數很大,宜將邏輯判斷移到迴圈體的外面。

8.const 與 #define 的比較

(1) const 常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤(邊際效應)。

(2) 有些整合化的除錯工具可以對 const 常量進行除錯,但是不能對巨集常量進行除錯。

9.函式介面的兩個要素是引數和返回值。 c 語言中,函式的引數和返回值的傳遞方式有兩種:值傳遞(pass by value)和指標傳遞(pass by pointer).c++ 語言中多了引用傳遞(pass by reference)。

注:如果引數是指標,且僅作輸入用,則應在型別前加 const,以防止該指標在函式體內被意外修改。

如果輸入引數以值傳遞的方式傳遞物件,則宜改用「const &」方式來傳遞,這樣可以省去臨時物件的構造和析構過程,從而提高效率。

10.記憶體分配方式有三種:

(1) 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數, static 變數。

(2) 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。

(3) 從堆上分配,亦稱動態記憶體分配。程式在執行的時候用 malloc 或 new 申請任意多少的記憶體,程式設計師自己負責在何時用 free 或 delete 釋放記憶體。動態記憶體的生存期由我們決定,使用非常靈活,但問題也最多。

11.指標與記憶體

(1)指標消亡了,並不表示它所指的記憶體會被自動釋放。

(2)記憶體被釋放了,並不表示指標會消亡或者成了 null 指標。

12.指標成為野指標

(1)指標變數沒有被初始化。任何指標變數剛被建立時不會自動成為 null 指標,它的預設值是隨機的,它會亂指一氣。所以,指標變數在建立的同時應當被初始化,要麼將指標設定為 null,要麼讓它指向合法的記憶體。

例如 char *p = null;

char *str = (char *) malloc(100);

(2)指標 p 被 free 或者 delete 之後,沒有置為 null,讓人誤以為 p 是個合法的指標。

(3)指標操作超越了變數的作用範圍。這種情況讓人防不勝防,示例程式如下:

class a

};void test(void)

p->func(); // p 是「野指標」

}

函式 test 在執行語句 p->func()時,物件 a 已經消失,而 p 是指向 a 的,所以 p 就

成了「野指標」。

13.記憶體耗盡

(1)判斷指標是否為 null,如果是則馬上用 return 語句終止本函式。

(2)判斷指標是否為 null,如果是則馬上用 exit(1)終止整個程式的執行。

C語言總結3

c語言總結3 用小於來判斷時從低處往上走,用大於來判斷時從高處往下走。只在要從多重迴圈中跳出時用goto,其他地方最好不用goto。每次召喚rand 就得到乙個隨機的整數。如果有固定次數,用for 如果必須執行一次,用do while 其他情況用while。只能被1和自己整除的數成為素數。break...

C語言總結3 陣列

1.陣列沒有初始化時,裡面儲存的內容是亂碼的 陣列只能整體被初始化,不能被整體賦值.include include int main char arr2 abc int arr3 將陣列初始化為0 printf d n sizeof arr1 3 printf d n sizeof arr2 4 s...

c語言 陣列學習總結(3)

函式 陣列和指標 指標操作 如果有 int a 5 則 a和 a 0 都表示陣列首元素a 0 的首位址。指向首元素 而 a則表示陣列的首位址。指向整個陣列 結合左值右值去理解 前提是 int a 10 1 a不能做左值 因為陣列在初始化之後就不能進行整體操作了 做右值表示首元素的首位址等同於 a 0...