1
第一章:預處理指令
使用預處理器是編程的一部分,能夠將相應的頭文件引入文件,
使用其中的函數、類型定義以及預處理宏,下面逐一介紹:
1、include指令——文件包含
說明:該指令能夠將程序所需的頭文件引入程序源文件,是比較
經常使用的指令;
格式:
(一)系統頭文件:#include<頭文件>
(二)我的頭文件:#include"頭文件"
注:C語言的對應頭文件是「stdio.h」
2、define指令——宏
說明:該指令能夠爲程序的某個部分提供能夠替換的符號。
格式:
(一)帶參數的宏:
#define(參數1,參數2,......,參數n)替換域
注意:
(1)替換域中的參數要帶括號;
(2)替換域中要參數替換的部分用參數名替換;
(二)不帶參數的宏
#define替換域
3、if指令——條件
2
說明:用於執行條件編譯,當條件成立時則執行語句。
格式:
#if條件
語句
#endif
4、ifdef指令——檢查宏是否已定義
說明:若是宏已定義,則執行語句。
格式:
#ifdef宏
語句
#endif
5、ifndef指令——檢查宏是否未定義
若是宏未定義,則執行語句。
格式:
#ifndef宏
語句
#endif
6、else指令——選擇
說明:在if失敗時執行語句,屬於if塊。
格式:
#else
語句
3
7、elif指令
說明:等價於elseif語句,當表達式爲True時執行語句,屬
於if塊。
格式:
#elif表達式
語句
8、undef指令
說明:取消宏定義
格式:#undef已定義的宏
9、line指令
說明:改變_LINE_和_FILE_的內容,主要用於調試或其餘特殊應
用。
格式:#linenumber["filename"]
10、error指令
說明:該指令主要用於調試,它強迫編譯器編譯終止,並經過預
處理器發出一條錯誤信息
格式:#error"文本"
11、endef指令
說明:結束條件編譯
12、pragma指令
說明:向編譯程序傳送命令
參數:
4
(一)Message參數
說明:向編譯輸出口傳送文本信息
格式:
#pragmamessage("文本")
(二)code_seg參數
說明:它可以設置程序函數代碼存放的代碼段,當咱們開發驅動
程序時就要用到它。
格式:
#pragmacode_seg(["section-name"["section-class"]])
(三)once參數
說明:只要在頭文件里加入這條指令,就能夠確保頭文件只編譯
一次,這條指令實際上在VC6就已經有了,但考慮到兼容性並無太
多使用它。
格式:#pragmaonce
(四)hdrstop參數
說明:表示預編譯頭文件到此爲止。
格式:#pragmahdrstop
(五)resource參數
說明:將*.dfm文件中的資源加入該工程;
格式:#pragmaresource"*.dfm"
(六)comment參數
說明:該指令將一個註釋記錄放入一個對象文件或可執行文件
5
中,經常使用的lib關鍵字,能夠幫咱們連入一個庫文件。
格式:#pragmacomment(...)
(七)warning參數
說明:警告參數;
格式:#pragmawarning(格式參數1:錯誤號,格式參數2:錯
誤號,...,格式參數n:錯誤號)
格式參數:
(1)disable:不顯示
(2)Once:只顯示一次
(3)Error:把警告信息做爲一條錯誤信息
此外,warning還支持如下格式:
(1)#pragmawarning(Push,n)
注意:N表明警告的等級(1-4)。
說明:保存全部警告信息的警告狀態,並把警告級別設定爲n。
(2)#pragmawarning(POP)
說明:從棧中彈出一個警告信息,在入棧和出棧之間的一切改動
取消。
(3)#pragmawarning(Push)
說明:保存全部警告信息的警告狀態。
(八)pack參數
說明:指定結構體的對齊方式,該指令來設定變量以n字節對齊
方式。
6
注意:
(1)若是n大於該變量所佔用的字節數,那麼偏移量以知足默認
的對齊方式;
(2)若是n小於該變量所佔用的字節數,偏移量爲n的倍數,不
用知足默認的對齊方式;
(3)結構體:若是n大於全部成員類型的所佔用的字節數,那麼,
結構體的總大小必須爲佔用空間量大的變量佔用空間的空間數的倍
數,不然爲n的倍數。
支持如下格式:
(1)#pragmapack(push)
說明:保存對齊方式。
(2)#pragmapack(pop)
說明:恢復對齊方式。
第二章:基本數據類型
C語言提供了多種基本類型,他們以下表所示:
類型 說明
int 整型
float 單精度浮點型
double 雙精度浮點型
char 字符串
提供瞭如下變量修飾符:
?Const:
7
?首先須要注意的是,const修飾的是在它前面的類型,若是它前
面沒有類型,那它修飾的是緊跟着它的那個類型
?用於參數列表,一般修飾的是指針類型,代表該函數不會試圖對
傳入的地址進行寫操做。
?做用:限定一個變量不容許被改變。
?Static:
?當static用於修飾全局變量聲明時,它表示該變量具備文件做用
域,只能被該源文件的代碼引用,不能被其餘源文件中的代碼訪
問
?當static用於修飾局部變量聲明時,它表示該變量不是分配在該
函數的活動記錄中,而是分配在全局的數據段(或bss段)中。簡
單的說,就是被static修飾的局部變量實際上並非局部變量,
而是具備函數做用域的全局變量,除了只能在定義它的函數內訪
問外(這是由C語法決定的),它的運行時特徵和全局變量徹底一
樣,函數返回不會影響它的狀態,它的初始化僅有一次,發生在
程序的裝載時,而不是在每次函數調用的時候初始化。
?Volatile:告訴優化器不能優化這個變量的讀寫操做,必定要爲這
個變量的讀寫操做生成代碼。
?Auto:函數初始和局部類型的默認存儲類型,在函數調用時被分配
到棧上,在函數返回時釋放存儲空間。
?Extern:置於變量或者函數前,以表示變量或者函數的定義在別的
文件中,提示編譯器遇到此變量和函數時在其餘模塊中尋找其定
8
義。另外,extern也可用來進行連接指定。
?Register:暗示編譯程序相應的變量將被頻繁地使用,若是可能的
話,應將其保存在CPU的寄存器中,以加快其存儲速度(請求編譯
器將其存放在CPU寄存器中)。
(一)基本變量聲明:
語法:
類型名變量表;
(二)數組聲明:
語法:
類型名變量1[大小],變量2[大小],...,變量n[大小];
(三)指針聲明:
語法:
類型名*變量1,*變量2,...,*變量n;
注意:
(1)賦值時,諾帶有*(間接訪問運算符),則只能賦給變量的內容,
不然只能賦給地址;
(2)賦內容以前必須先賦予可訪問的地址;
(四)指針數組
語法:
類型名*變量1[大小],*變量2[大小],...,*變量n[大小];
注意:
(1)賦值時,諾帶有*(間接訪問運算符),則只能賦給變量的內容,
9
不然只能賦給地址;
(2)賦內容以前必須先賦予可訪問的地址;
(五)數組下標
語法:
數組名[任意表達式];
第三章:擴展數據類型
擴展數據類型可由用戶定義,分爲結構類型(struct)、牧舉類
型(enum)以及聯合類型(union)。
注意:諾不加typedef關鍵字,這隻能定義變量和標籤。
(一)牧舉類型定義:
語法:
Typedefenum[標籤]
{
用戶標識符表
}類型名;
(二)結構類型定義
語法:
Typedefstruct[標籤]
{
類型名1變量1;
類型名2變量2;
...
10
類型名n變量n;
}類型名;
(三)聯合類型定義
說明:編譯器只爲聯合類型中最大的成員變量分配空間,一
個成員變量改變,其餘成員變量同時改變;
語法:
Typedefunion[標籤]
{
類型名1變量1;
類型名2變量2;
...
類型名n變量n;
}類型名;
第四章:函數
1、主函數
主函數是程序的入口,全部的C語言程序都有一個主函數,C語
言的主函數爲main函數,區分大小寫。
(一)無參程序
語法:
Intmain(void)
{
函數體;
11
}
(二)帶程序參數的程序
語法:
Intmain(intargn,char*argc[])
{
函數體;
}
注意:
? Argn:程序向量,用戶傳遞給程序的參數數量(包括程序名);
? Argc:程序參數,用戶傳遞給程序的參數(包括程序名)
2、函數聲明
語法:
類型名函數名(形參表);
形參表聲明:
類型名變量;
注意:不一樣形參用逗號分割;
第五章:表達式
1、賦值表達式
語法:
變量=表達式;
2、算術表達式
語法:
12
操做數1(算術運算符)操做數2;
3、邏輯表達式
語法:操做數1(邏輯運算符)操做數2;
4、強制類型轉換
語法:(轉換類型)變量;
5、逗號表達式
語法:操做數1,操做數2,...,操做數n;
6、條件表達式
語法:條件:True?False
說明:當條件爲True時,執行True,不然執行False。
7、初始化表達式
語法:類型名變量1=操做數1,變量2=操做數2,...,變量n=操
做數n;
8、複合賦值運算表達式
語法:變量(運算符)=表達式;
說明:等效於變量=變量(運算符)表達式;
第六章:語句結構
1、順序結構
說明:程序順序執行的結構
2、選擇結構
(一)if語句
(1)if-else語句
13
語法:
If(邏輯表達式1)
{
程序塊1;
}
Else
{
程序塊2;
}
(2)if語句
語法:
If(邏輯表達式)
{
程序塊;
}
(3)else-if語句
語法:
If(邏輯表達式1)
{
程序塊1;
}
Elseif(邏輯表達式2)
14
{
語句塊2;
}
Elseif(邏輯表達式3)
{
語句塊3;
}
...
Else
{
程序塊n;
}
(二)switch語句
語法:
Switch(表達式)
{
Case常量表達式1:語句1;
Case常量表達式2:語句2;
Case常量表達式3:語句3;
...
Case常量表達式n-1:語句n-1;
Default:語句n;
15
}
Switch語句的控制流是從符合條件的標號進入,從最後一條
語句出來;
3、循環結構
(一)while語句
語法
While(邏輯表達式)
{
語句塊;
}
(二)do-while語句
語法:
Do
{
語句塊;
}
While(邏輯表達式);
(三)for語句
語法:
For(初始化表達式;邏輯表達式;更新表達式)
{
語句塊;
16
}
4、跳轉結構
(一)goto語句--無條件轉移指令
語法:goto標號;
(二)break語句--跳出循環、switch
語法:break;
(三)return語句--返回語句
語法:return(返回值);
(四)continue語句--跳出一次循環
語法:continue;
5、空語句「;」
注:
(1)「;」是C、C++語言的語句結束符,語句後面必須加「;」;
(2){、}爲程序塊定義,後不須要加語句結束符。
第七章:數據結構
數據結構分爲動態數據結構和靜態數據結構
1、鏈表
鏈表屬於動態數據結構,實質上是一個帶有指向下一個節點的指針的
結構類型的指針;
運算符:
間接成員訪問運算符(->)爲鏈表運算符;
2、有序表
17
有序表實指從頭至尾都按必定順序(升序或降序)排列的數據結構,
用鏈式結構表示是爲動態數據結構。
3、隊列
隊列是一種先進先出結構,用鏈式結構表示是爲動態數據結構,而且
以後一個結構的指針域指向隊頭。
4、棧
棧是一種後進先出結構,用鏈式結構表示是爲動態數據結構。
附錄1:C語言運算符及優先級
優先級 運算符 名稱或含義 使用形式 結合方向 說明
1 [] 數組下標 數組名[常量表達式] 左到右
() 圓括號 (表達式)/函數名(形
參表)
. 成員選擇(對象) 對象.成員名
-> 成員選擇(指針) 對象指針->成員名
2 - 負號運算符 -表達式 右到左 單目運算符
(類型) 強制類型轉換 (數據類型)表達式
++ 自增運算符 ++變量名/變量名++ 單目運算符
-- 自減運算符 --變量名/變量名-- 單目運算符
* 取值運算符 *指針變量 單目運算符
& 取地址運算符 &變量名 單目運算符
! 邏輯非運算符 !表達式 單目運算符
~ 按位取反運算符 ~表達式 單目運算符
sizeof 長度運算符 sizeof(表達式)
3 / 除 表達式/表達式 左到右 雙目運算符
18
* 乘 表達式*表達式 雙目運算符
% 餘數(取模) 整型表達式/整型表達
式
雙目運算符
4 + 加 表達式+表達式 左到右 雙目運算符
- 減 表達式-表達式 雙目運算符
5 << 左移 變量<<表達式 左到右 雙目運算符
>> 右移 變量>>表達式 雙目運算符
6 > 大於 表達式>表達式 左到右 雙目運算符
>= 大於等於 表達式>=表達式 雙目運算符
< 小於 表達式<表達式 雙目運算符
<= 小於等於 表達式<=表達式 雙目運算符
7 == 等於 表達式==表達式 左到右 雙目運算符
!= 不等於 表達式!= 表達式 雙目運算符
8 & 按位與 表達式&表達式 左到右 雙目運算符
9 ^ 按位異或 表達式^表達式 左到右 雙目運算符
10 | 按位或 表達式|表達式 左到右 雙目運算符
11 && 邏輯與 表達式&&表達式 左到右 雙目運算符
12 || 邏輯或 表達式||表達式 左到右 雙目運算符
13 ?: 條件運算符 表達式1?表達式2:
表達式3
右到左 三目運算符
14 = 賦值運算符 變量=表達式 右到左
/= 除後賦值 變量/=表達式
*= 乘後賦值 變量*=表達式
%= 取模後賦值 變量%=表達式
+= 加後賦值 變量+=表達式
19
-= 減後賦值 變量-=表達式
<<= 左移後賦值 變量<<=表達式
>>= 右移後賦值 變量>>=表達式
&= 按位與後賦值 變量&=表達式
^= 按位異或後賦值 變量^=表達式
|= 按位或後賦值 變量|=表達式
15 , 逗號運算符 表達式,表達式,… 左到右 從左向右順
序運算
附錄2:ANSIC定義的C語言32個關鍵字
關鍵字 意義
auto 聲明自動變量
short 聲明短整型變量或函數
int 聲明整型變量或函數
long 聲明長整型變量或函數
float 聲明浮點型變量或函數
double 聲明雙精度變量或函數
char 聲明字符型變量或函數
struct 聲明結構體變量或函數
union 聲明共用數據類型
enum 聲明枚舉類型
typedef 用以給數據類型取別名
const 聲明只讀變量
unsigned 聲明無符號類型變量或函數
20
signed 聲明有符號類型變量或函數
extern 聲明變量是在其餘文件中聲明
register 聲明寄存器變量
status 聲明靜態變量
volatile: 說明變量在程序執行中可被隱含地改變
void 聲明函數無返回值或無參數,聲明無類型指針
if 條件語句
else 條件語句否認分支(與if連用
switch 用於開關語句
case 開關語句分支
for 一種循環語句
do 循環語句的循環體
while 循環語句的循環條件
goto 無條件跳轉語句
continue 結束當前循環,開始下一輪循環
break 跳出當前循環
default 開關語句中的「其餘」分支
sizeof 計算數據類型長度
return 子程序返回語句(能夠帶參數,也可不帶參數)編程