第一章 C語言基礎算法
1. C語言編譯過程編程
預處理:宏替換、條件編譯、頭文件包含、特殊符號數組
編譯、優化:翻譯並優化成等價的中間代碼表示或彙編代碼函數
彙編:生成目標文件,及與源程序等效的目標的機器語言代碼,至少由代碼段和數據段組成優化
連接:將有關的目標文件彼此相鏈接,分爲靜態連接和動態連接編碼
2. 編碼規範命令行
適當的註釋;翻譯
「{」和「}」獨佔一行並使一對對齊,「{}」以內的代碼向右縮進4個空格;if、for、while等關鍵字後留一個空格再跟「(」,但函數緊跟;設計
「(」後向緊跟;「)」、「,」、「;」前向緊跟;指針
「,」後留空格;「;」不是一行結束時留空格;
二元操做符兩邊適當加空格,但單目運算符及「[ ]」、「.」、「->」要緊跟;
當一行代碼太長時適當換行
3. 關鍵字
數據類型:int、char、float、double、short、long、void、signed、unsigned、enum(枚舉類型)、struct(結構體)、union(聯合體)、const(只讀變量)、typedef(類型定義)、volatile(多爲嵌入式開發用,說明這個變量可被隱含的改變,這樣優化器在每次用這個變量時都會從新讀取這個變量而不會使用寄存器裏的值)
存儲類別:auto(自動)、static(靜態、內部)、register(寄存器)、extern(外部)
語句命令字:break(跳出switch和本層循環)、case、continue(跳出本次循環轉入下一次循環的條件判斷)、default、do、else、for、goto、if、renturn、switch、while
運算符:sizeof
4. 標識符
以字母或「_」開頭,能夠由字母、數字、「_」組成
5. 常量
常量後能夠加「u」、「U」、「L」、「l」修飾;八進制數以「0」開頭;十六進制以「0x」、「0X」開頭;符號常量用單引號,字符串常量用雙引號,並注意字符串常量所佔空間爲字符串長度加一字節
6. 數據類型
TC/Byte VC/Byte
[signed] int 2 4
unsigned [int] 2 4
[signed] short [int] 2 2
unsigned short [int] 2 2
[signed] long [int] 4 4
unsigned long [int] 4 4
float 4 4
double 8 8
char 1 1
signed char 1 1
unsigned char 1 1
typedef:typedef 類型名 新名 ,typedef在編譯時執行而宏在預處理時執行
typedef聲明數組類型:如typedef int arr[10],這樣「arr a;」和「int a[10];」等效
枚舉類型:
enum 枚舉名
{
標識符[=符號常量],
……
標識符[=符號常量],
}[變量名];
共用體:
union 共用提名
{
數據類型 標識符;
……
數據類型 標識符;
}[變量名];
7. 變量的存儲類型
局部變量:在函數中(包括main函數)或在複合語句中定義的變量,只在這個函數或複合語句中才起做用,形參屬此類,也稱內部變量
全局變量:在函數外定義的變量,在定義時候到本源文件結束起做用,若全局變量和局部變量重名(同一函數中變量不可同名,但不一樣函數能夠),則局部變量起做用,同名全局變量暫不起做用
靜態存儲變量:存儲在靜態存儲區,在編譯時分配空間和賦初值,沒有初值賦0,包括全局變量和局部靜態變量(和自動變量對應,用static)
動態存儲變量:存儲在動態存儲區,函數調用時分配空間和賦初值,沒有初值則爲隨機數,包括形參和自動變量(定是局部變量,用auto)
第二章 運算符與表達式
1. 運算符的優先級
1:( ) [ ] -> .
2:! ~ ++ -- - + * & (類型符) sizeof (全部單目運算符)
3:* / %
4:+ -
5:<< >>
6:< <= > >=
7:== !=
8:&
9:^
10:|
11:&&
12:||
13:? :
14:= += -= *= /= %= >>= <<= &= |= ^= (全部賦值運算符)
15:,
其中只有賦值運算符、條件運算符(三目)、單目運算符是右結合
2. 表達式的值
賦值表達式:給變量賦的值
條件運算符:根據「?」前表達式選擇「:」兩邊的一個表達式的值
逗號表達式:逗號分隔的最後一個表達式的值
第三章 函數
1. 內部、外部函數
用static能夠聲明(定義)內部函數,此種函數只能被同一源文件的函數調用,此時就不用擔憂與其餘文件函數同名;用extern能夠聲明(定義)外部函數,其中extern可省
2. main函數的參數
main(int argc, char *argv[]),調用main時在命令行中輸入「filename str1 str2……」,則argc爲包括filename在內的參數個數,argv指向str一、str2 ……
第四章 指針
1. 指向字符串的指針
char *p=」Hello world.」; 中p指向字符串常量,並不是把字符串賦給p指向的內存
2. 幾種定義
int *p; 指向整型的指針
int (*p)[n]; 指向n長度一維數組的指針
int *p[n]; n長度指向整型的指針數組
int (*p)(); 指向函數的指針
int *p(); 整型指針型函數,函數返回值是整型指針
int **p; 二級指針,指向指向整型指針的指針,和指向一維數組的指針不一樣
3. 「.」和「->」的區別
「.」是結構體或聯合體用來調出成員的,與結構體變量或聯合體變量一塊兒用,而「->」和指向結構體變量或聯合體變量的指針一塊兒用,他們不能互換(加「*」時才能夠)
4. const和指針
(const int *)和(int *)並不是同一種類型,後者可自動類型轉化到前者,前者不可自動類型轉化到後者。注意(const int *)和(int * const)的區別,前者是指向常量的指針,後者爲指向變量的常量指針。(const int *)變量不可經過解引用改變所指內容,但能夠改變該變量的值。(int * const)變量不可改變,但能夠改變所指內容。一般將函數參數聲明成const型或指向cosnt指針,避免改變參數的值或它所指的值。
第五章 預處理
1. 預處理的功能
宏定義、文件包含、條件編譯,都帶有「#」
2. 實例
#define,宏定義,帶參數時注意加「()」,和#undef配合
#include,文件包含,接「<>」時表示只在標準庫中查找,接「」」」時,先在當前目錄找找不到再到標準庫
#if ……
……
#elif
……
#else
……
#edif
#ifdef:當被宏定義時
#ifndef:當未被宏定義時
#line:#line 行號 [「文件名」]
#pragma:參數爲下面三種
message,在編譯信息輸出窗口中輸出相應信息
code,設置程序中函數代碼存放的代碼段
once,保證頭文件被編譯一次
3. 特殊宏定義
__LINE__、__FILE__、__DATE__、__TIME__、__STDC__、__cplusplus 等
第六章 經常使用算法
1. 排序
2. 查找
3. 數據壓縮
參考文獻
C 語言開發實戰寶典/ 劉彬彬,李偉明等編著. —北京:清華大學出版社,2011.1
C 語言程序設計教程/ 李玲,桂瑋珍,劉蓮英編著. —北京:人民郵電出版社,2005.2
C函數速查手冊/ 尹德淳編著. —北京:人民郵電出版社,2009.4
C 語言高級程序設計/ 陳天洲編著. —北京:人民郵電出版社,2002.12
C語言算法速查手冊/ 程曉旭等編著. —北京:人民郵電出版社,2009.10
C語言編程之道/ 劉彬彬,孫秀梅,李鑫編著. —北京:人民郵電出版社,2011.3