C語(yu)(yu)言(yan)(yan)(yan)是一(yi)門面向過程(cheng)的(de)(de)計(ji)算機編(bian)程(cheng)語(yu)(yu)言(yan)(yan)(yan),與C++、C#、Java等(deng)面向對象編(bian)程(cheng)語(yu)(yu)言(yan)(yan)(yan)有所不(bu)同(tong)。C語(yu)(yu)言(yan)(yan)(yan)的(de)(de)設計(ji)目(mu)標是提供一(yi)種能以簡易的(de)(de)方式編(bian)譯(yi)、處理低級(ji)存儲(chu)器、僅產生少量的(de)(de)機器碼以及不(bu)需要任何(he)運(yun)行(xing)環(huan)境支持(chi)便能運(yun)行(xing)的(de)(de)編(bian)程(cheng)語(yu)(yu)言(yan)(yan)(yan)。C語(yu)(yu)言(yan)(yan)(yan)描述(shu)問(wen)題比匯編(bian)語(yu)(yu)言(yan)(yan)(yan)迅速、工作量小(xiao)、可(ke)(ke)讀性好(hao)、易于調試、修改和(he)移植,而代(dai)(dai)碼質量與匯編(bian)語(yu)(yu)言(yan)(yan)(yan)相(xiang)當。C語(yu)(yu)言(yan)(yan)(yan)一(yi)般(ban)只比匯編(bian)語(yu)(yu)言(yan)(yan)(yan)代(dai)(dai)碼生成的(de)(de)目(mu)標程(cheng)序(xu)效率低10%-20%。因此,C語(yu)(yu)言(yan)(yan)(yan)可(ke)(ke)以編(bian)寫系統軟件。
當(dang)前階段,在編(bian)程領(ling)域(yu)中,C語(yu)(yu)(yu)言的運用(yong)(yong)(yong)非常(chang)之(zhi)多(duo),它兼顧了高級(ji)語(yu)(yu)(yu)言和匯編(bian)語(yu)(yu)(yu)言的優(you)點,相較(jiao)于其它編(bian)程語(yu)(yu)(yu)言具有較(jiao)大優(you)勢。計算機(ji)系(xi)統設計以(yi)及應用(yong)(yong)(yong)程序編(bian)寫是C語(yu)(yu)(yu)言應用(yong)(yong)(yong)的兩大領(ling)域(yu)。同時,C語(yu)(yu)(yu)言的普適較(jiao)強,在許多(duo)計算機(ji)操作系(xi)統中都能夠得(de)到(dao)適用(yong)(yong)(yong),且效(xiao)率(lv)顯著。
C語言擁有經過了漫長發展歷史的完整的理(li)論體系,在編程語言中具有舉足(zu)輕重的地(di)位。
C語(yu)(yu)言誕生(sheng)于(yu)美(mei)國的(de)(de)(de)(de)(de)貝爾實驗室,由丹尼(ni)斯·里(li)奇(Dennis MacAlistair Ritchie)以肯尼(ni)斯·藍(lan)·湯(tang)普(pu)(pu)森(Kenneth Lane Thompson)設計的(de)(de)(de)(de)(de)B語(yu)(yu)言為(wei)基礎發(fa)展而來(lai),在它的(de)(de)(de)(de)(de)主體設計完(wan)成后,湯(tang)普(pu)(pu)森和里(li)奇用它完(wan)全重寫了UNIX,且隨著UNIX的(de)(de)(de)(de)(de)發(fa)展,c語(yu)(yu)言也得到了不(bu)斷的(de)(de)(de)(de)(de)完(wan)善。為(wei)了利于(yu)C語(yu)(yu)言的(de)(de)(de)(de)(de)全面推廣(guang),許多專家學者和硬件(jian)廠商聯合(he)組成了C語(yu)(yu)言標(biao)準(zhun)委員會(hui),并在之(zhi)后的(de)(de)(de)(de)(de)1989年(nian)(nian),誕生(sheng)了第一個完(wan)備的(de)(de)(de)(de)(de)C標(biao)準(zhun),簡稱“C89”,也就是“ANSI C”,截至2020年(nian)(nian),最新的(de)(de)(de)(de)(de)C語(yu)(yu)言標(biao)準(zhun)為(wei)2018年(nian)(nian)6月發(fa)布的(de)(de)(de)(de)(de)“C18”。
C語(yu)言(yan)(yan)之所(suo)以(yi)命名為C,是因為C語(yu)言(yan)(yan)源自(zi)Ken Thompson發明的B語(yu)言(yan)(yan),而B語(yu)言(yan)(yan)則源自(zi)BCPL語(yu)言(yan)(yan)。
1967年,劍(jian)橋大學(xue)的Martin Richards對CPL語言進(jin)行了(le)簡化,于是產生了(le)BCPL(Basic Combined Programming Language)語言。
20世紀60年(nian)代,美國AT&T公司貝爾實(shi)驗室(AT&T Bell Laboratories)的(de)研究員(yuan)肯(ken)·湯(tang)普森(sen)(Kenneth Lane Thompson)閑來無(wu)事,手(shou)癢(yang)難耐,想玩一個他自(zi)己編的(de),模擬在(zai)太陽系(xi)(xi)(xi)航行的(de)電(dian)子游戲(xi)——Space Travel。他背著(zhu)老板,找到了臺(tai)空(kong)閑的(de)小型計算機——PDP-7。但這(zhe)臺(tai)電(dian)腦沒有操作系(xi)(xi)(xi)統(tong),而游戲(xi)必須使(shi)用操作系(xi)(xi)(xi)統(tong)的(de)一些功能,于是(shi)他著(zhu)手(shou)為PDP-7開(kai)發操作系(xi)(xi)(xi)統(tong)。后來,這(zhe)個操作系(xi)(xi)(xi)統(tong)被命(ming)名為——UNICS(Uniplexed Information and Computing Service)。
1969年(nian),美國貝爾實驗室(shi)的(de)(de)Ken Thompson,以BCPL語言為基礎,設(she)計出很簡單(dan)且很接近(jin)硬件的(de)(de)B語言(取BCPL的(de)(de)首字(zi)母),并且用B語言寫(xie)了(le)初版UNIX操作系統(tong)(叫UNICS)。
1971年,同樣酷(ku)愛Space Travel的丹尼斯·里奇為了能(neng)早(zao)點(dian)兒(er)玩上游戲,加入了湯普(pu)森(sen)的開發項目,合作(zuo)開發UNIX。他的主要工作(zuo)是(shi)改造B語言,使其更成熟。
1972年,美國貝爾實驗室(shi)的(de)丹尼斯·里(li)奇在B語(yu)言(yan)的(de)基礎(chu)上最終設計出了一種新(xin)的(de)語(yu)言(yan),他取(qu)了BCPL的(de)第二(er)個字(zi)母作為這種語(yu)言(yan)的(de)名字(zi),這就是(shi)C語(yu)言(yan)。
1973年(nian)初,C語言的(de)(de)主體完(wan)成。湯普森和里奇迫不(bu)(bu)及待地(di)開(kai)(kai)始用它(ta)完(wan)全(quan)重寫了(le)(le)UNIX。此(ci)時,編(bian)程的(de)(de)樂趣(qu)使他們已經完(wan)全(quan)忘記(ji)了(le)(le)那個“Space Travel”,一門心(xin)思地(di)投入到了(le)(le)UNIX和C語言的(de)(de)開(kai)(kai)發中。隨著UNIX的(de)(de)發展,C語言自身也在不(bu)(bu)斷地(di)完(wan)善。直到2020年(nian),各種版本的(de)(de)UNIX內(nei)核和周邊(bian)工具仍然使用C語言作(zuo)為最(zui)主要的(de)(de)開(kai)(kai)發語言,其中還有不(bu)(bu)少(shao)繼(ji)承湯普遜和里奇之手的(de)(de)代碼。
在(zai)開發(fa)中(zhong),他們還考慮(lv)把(ba)UNIX移植到其他類型的(de)計算機上使用。C語言(yan)(yan)強大的(de)移植性(Portability)在(zai)此顯(xian)現。機器(qi)(qi)(qi)語言(yan)(yan)和(he)(he)匯(hui)編語言(yan)(yan)都不(bu)具(ju)有移植性,為x86開發(fa)的(de)程(cheng)序(xu),不(bu)可(ke)能在(zai)Alpha、SPARC和(he)(he)ARM等機器(qi)(qi)(qi)上運(yun)行。而C語言(yan)(yan)程(cheng)序(xu)則可(ke)以使用在(zai)任意架構(gou)的(de)處理(li)器(qi)(qi)(qi)上,只要那種架構(gou)的(de)處理(li)器(qi)(qi)(qi)具(ju)有對應的(de)C語言(yan)(yan)編譯器(qi)(qi)(qi)和(he)(he)庫,然后將(jiang)C源代碼編譯、連接成目(mu)標二(er)進制文件(jian)之后即可(ke)在(zai)哪種架構(gou)的(de)處理(li)器(qi)(qi)(qi)運(yun)行。
1977年,丹(dan)尼斯·里(li)奇(qi)發(fa)表(biao)了(le)不依賴(lai)于具體機(ji)器系(xi)統的(de)C語言編譯文本《可移植的(de)C語言編譯程(cheng)序(xu)》。
C語(yu)(yu)言(yan)(yan)繼續發(fa)展,在(zai)1982年,很多有識之士(shi)和美國國家標(biao)準(zhun)協會(ANSI)為(wei)(wei)了(le)使C語(yu)(yu)言(yan)(yan)健(jian)康地發(fa)展下去,決定成立C標(biao)準(zhun)委員會,建立C語(yu)(yu)言(yan)(yan)的(de)(de)標(biao)準(zhun)。委員會由硬件(jian)(jian)廠商(shang)、編譯器及其他軟件(jian)(jian)工具生產商(shang)、軟件(jian)(jian)設計師(shi)、顧問、學術界人士(shi)、C語(yu)(yu)言(yan)(yan)作者和應用(yong)程序員組成。1989年,ANSI發(fa)布了(le)第(di)一(yi)(yi)個完(wan)(wan)整的(de)(de)C語(yu)(yu)言(yan)(yan)標(biao)準(zhun)——ANSI X3.159-1989,簡(jian)(jian)稱(cheng)(cheng)“C89”,不(bu)過人們也習慣(guan)稱(cheng)(cheng)其為(wei)(wei)“ANSI C”。C89在(zai)1990年被國際(ji)標(biao)準(zhun)化組織(International Standard Organization,ISO)一(yi)(yi)字不(bu)改地采納,ISO官方給予的(de)(de)名稱(cheng)(cheng)為(wei)(wei):ISO/IEC 9899,所以ISO/IEC9899:1990也通常(chang)被簡(jian)(jian)稱(cheng)(cheng)為(wei)(wei)“C90”。1999年,在(zai)做了(le)一(yi)(yi)些必要的(de)(de)修正和完(wan)(wan)善后,ISO發(fa)布了(le)新的(de)(de)C語(yu)(yu)言(yan)(yan)標(biao)準(zhun),命(ming)名為(wei)(wei)ISO/IEC 9899:1999,簡(jian)(jian)稱(cheng)(cheng)“C99”。在(zai)2011年12月8日,ISO又(you)正式發(fa)布了(le)新的(de)(de)標(biao)準(zhun),稱(cheng)(cheng)為(wei)(wei)ISO/IEC9899:2011,簡(jian)(jian)稱(cheng)(cheng)為(wei)(wei)“C11”。
數據類型
C的數據類型(xing)包括(kuo):整型(xing)(short、int、long、long long)、字符型(xing)(char)、實(shi)型(xing)或浮點(dian)型(xing)(單精(jing)度float和(he)雙(shuang)精(jing)度double)、枚(mei)舉類型(xing)(enum)、數組類型(xing)、結構體類型(xing)(struct)、共用體類型(xing)(union)、指針(zhen)類型(xing)和(he)空類型(xing)(void)。
常量與變量
常量其值(zhi)不可改變,符(fu)號常量名通常用大寫。
變(bian)量是以某標(biao)識符(fu)(fu)為(wei)名(ming)字(zi)(zi),其值可以改變(bian)的量。標(biao)識符(fu)(fu)是以字(zi)(zi)母(mu)或(huo)下劃(hua)線開頭的一(yi)串(chuan)由字(zi)(zi)母(mu)、數(shu)字(zi)(zi)或(huo)下劃(hua)線構(gou)成的序(xu)列,請(qing)注意第一(yi)個字(zi)(zi)符(fu)(fu)必須為(wei)字(zi)(zi)母(mu)或(huo)下劃(hua)線,否則為(wei)不合法的變(bian)量名(ming)。變(bian)量在編譯(yi)時(shi)為(wei)其分配(pei)相應存(cun)儲(chu)單元。
數組
如果一(yi)(yi)個變量(liang)名后面跟著一(yi)(yi)個有(you)數字的(de)(de)中(zhong)括(kuo)號,這個聲(sheng)明就是(shi)數組聲(sheng)明。字符串也是(shi)一(yi)(yi)種(zhong)數組。它們以ASCII的(de)(de)NULL作(zuo)為數組的(de)(de)結束。要特別注意的(de)(de)是(shi),中(zhong)括(kuo)號內的(de)(de)索引值是(shi)從0算起(qi)的(de)(de)。
指針
如果一(yi)個(ge)變(bian)量聲明時(shi)(shi)在前面使用*號,表明這(zhe)是(shi)(shi)個(ge)指針(zhen)(zhen)型變(bian)量。換句話說,該變(bian)量存(cun)(cun)儲(chu)一(yi)個(ge)地(di)址(zhi),而(er)*(此處特指單目運(yun)算符(fu)*,下同。C語(yu)言(yan)中(zhong)另有雙目運(yun)算符(fu)*)則是(shi)(shi)取內(nei)(nei)容操作符(fu),意思是(shi)(shi)取這(zhe)個(ge)內(nei)(nei)存(cun)(cun)地(di)址(zhi)里存(cun)(cun)儲(chu)的(de)內(nei)(nei)容。指針(zhen)(zhen)是(shi)(shi)C語(yu)言(yan)區別于其他同時(shi)(shi)代高級語(yu)言(yan)的(de)主(zhu)要(yao)特征之一(yi)。
指(zhi)針不僅可(ke)以是變量(liang)的(de)地址(zhi),還可(ke)以是數組、數組元素、函(han)數的(de)地址(zhi)。通過(guo)指(zhi)針作為形式(shi)參數可(ke)以在函(han)數的(de)調用過(guo)程得到(dao)一(yi)個(ge)以上的(de)返回(hui)值,不同于return(z)這樣的(de)僅能得到(dao)一(yi)個(ge)返回(hui)值。
指(zhi)(zhi)針(zhen)是一把雙(shuang)刃劍(jian),許多操作可(ke)以通過指(zhi)(zhi)針(zhen)自然的(de)表達,但是不(bu)正確的(de)或者過分(fen)的(de)使用指(zhi)(zhi)針(zhen)又會給程(cheng)序帶(dai)來(lai)大量潛在的(de)錯誤。
字符串
C語言的字(zi)(zi)(zi)符(fu)串(chuan)其實就是(shi)以(yi)' '字(zi)(zi)(zi)符(fu)結尾的char型(xing)數組,使(shi)(shi)用(yong)字(zi)(zi)(zi)符(fu)型(xing)并不需(xu)要引(yin)用(yong)庫,但是(shi)使(shi)(shi)用(yong)字(zi)(zi)(zi)符(fu)串(chuan)就需(xu)要C標準庫里(li)面的一些用(yong)于(yu)對字(zi)(zi)(zi)符(fu)串(chuan)進行操作(zuo)的函(han)數。它們不同于(yu)字(zi)(zi)(zi)符(fu)數組。使(shi)(shi)用(yong)這些函(han)數需(xu)要引(yin)用(yong)頭文件。
文件輸入/輸出
在C語言中(zhong),輸入和輸出是(shi)經由標準庫中(zhong)的一組函(han)(han)數來(lai)實現的。在ANSI C中(zhong),這些(xie)函(han)(han)數被定義在頭(tou)文件;中(zhong)。
標準輸入/輸出
有三個標(biao)準(zhun)輸入/輸出(chu)是(shi)標(biao)準(zhun)I/O庫預先定義的:
stdin標準輸入
stdout標準輸出
stderr輸(shu)入輸(shu)出(chu)錯誤
C語(yu)(yu)言(yan)的(de)(de)運(yun)(yun)算(suan)(suan)(suan)(suan)非常靈活(huo),功能十(shi)分(fen)(fen)豐富,運(yun)(yun)算(suan)(suan)(suan)(suan)種(zhong)類遠多(duo)于其它程(cheng)(cheng)序設計語(yu)(yu)言(yan)。在表(biao)(biao)(biao)達式(shi)方(fang)面較其它程(cheng)(cheng)序語(yu)(yu)言(yan)更為(wei)簡潔,如(ru)自加、自減、逗號運(yun)(yun)算(suan)(suan)(suan)(suan)和三目運(yun)(yun)算(suan)(suan)(suan)(suan)使表(biao)(biao)(biao)達式(shi)更為(wei)簡單,但(dan)初學者往往會覺的(de)(de)這(zhe)種(zhong)表(biao)(biao)(biao)達式(shi)難讀,關鍵原因就是對運(yun)(yun)算(suan)(suan)(suan)(suan)符(fu)和運(yun)(yun)算(suan)(suan)(suan)(suan)順序理解(jie)不(bu)透不(bu)全。當(dang)多(duo)種(zhong)不(bu)同運(yun)(yun)算(suan)(suan)(suan)(suan)組成一個運(yun)(yun)算(suan)(suan)(suan)(suan)表(biao)(biao)(biao)達式(shi),即一個運(yun)(yun)算(suan)(suan)(suan)(suan)式(shi)中出現多(duo)種(zhong)運(yun)(yun)算(suan)(suan)(suan)(suan)符(fu)時,運(yun)(yun)算(suan)(suan)(suan)(suan)的(de)(de)優先順序和結合規(gui)則就會顯得十(shi)分(fen)(fen)重要(yao)。
關(guan)鍵字(zi)(zi)又稱為保留字(zi)(zi),就是已被C語言本(ben)身(shen)使用,不能作(zuo)(zuo)其它用途使用的字(zi)(zi)。例如關(guan)鍵字(zi)(zi)不能用作(zuo)(zuo)變量名(ming)、函數名(ming)等(deng)標(biao)識符。
數據類型關鍵字
short:修飾int,短整型數據,可省略被(bei)修飾的int。(K&R時期(qi)引入)
long:修飾(shi)int,長整型數據,可省略被修飾(shi)的(de)int。(K&R時期引入)
long long:修飾int,超長整型數(shu)據,可省略被修飾的(de)int。(C99標準新增)
signed:修(xiu)飾整型數(shu)據,有(you)符號數(shu)據類(lei)型。(C89標準新增)
unsigned:修飾整型數據(ju),無符(fu)號數據(ju)類型。(K&R時期引入)
restrict:用于限(xian)定和約束(shu)指針(zhen),并表明指針(zhen)是(shi)訪問一(yi)(yi)個數據對象的(de)初始(shi)且唯一(yi)(yi)的(de)方式。(C99標準(zhun)新(xin)增)
復雜類型關鍵字
struct:結構體(ti)聲明。(K&R時期引入)
union:聯合體聲明。(K&R時期引入(ru))
enum:枚舉聲明。(C89標(biao)準新增)
typedef:聲(sheng)明類(lei)型別(bie)名。(K&R時(shi)期引入)
sizeof:得(de)到特(te)定(ding)類型或特(te)定(ding)類型變量的(de)大(da)小(xiao)。(K&R時期引入)
inline:內聯函數用(yong)(yong)于取(qu)代宏定義,會(hui)在任何調用(yong)(yong)它(ta)的地方(fang)展(zhan)開。(C99標準新增)
存儲級別關鍵字
auto:指定為自(zi)動變量(liang),由編譯(yi)器自(zi)動分(fen)配及釋放。通常在(zai)棧上分(fen)配。與static相反(fan)。當變量(liang)未指定時(shi)默認為auto。(K&R時(shi)期(qi)引入)
static:指(zhi)定為(wei)靜(jing)(jing)態變量,分配在靜(jing)(jing)態變量區,修飾(shi)函數時(shi)(shi),指(zhi)定函數作用域為(wei)文件內部(bu)。(K&R時(shi)(shi)期引入)
register:指定為寄存(cun)器(qi)(qi)變量,建(jian)議編(bian)譯器(qi)(qi)將變量存(cun)儲到寄存(cun)器(qi)(qi)中使(shi)用,也可以修(xiu)飾函數形參,建(jian)議編(bian)譯器(qi)(qi)通(tong)過寄存(cun)器(qi)(qi)而(er)不是(shi)堆棧傳(chuan)遞參數。(K&R時(shi)期引(yin)入)
extern:指定(ding)(ding)對(dui)應變量(liang)為外部變量(liang),即標(biao)示(shi)變量(liang)或者函(han)數的定(ding)(ding)義(yi)在別(bie)的文件中(zhong),提示(shi)編譯器遇到此變量(liang)和函(han)數時(shi)在其他模塊中(zhong)尋找其定(ding)(ding)義(yi)。(K&R時(shi)期引入(ru))
const:指定變量(liang)不可(ke)(ke)被(bei)當前線程改變(但(dan)有可(ke)(ke)能(neng)被(bei)系統(tong)或其他線程改變)。(C89標準新增)
volatile:指定變(bian)(bian)量(liang)(liang)的(de)值有可能會被系統或其他線程改變(bian)(bian),強制編譯器(qi)每次(ci)從內存中取得該變(bian)(bian)量(liang)(liang)的(de)值,阻止編譯器(qi)把該變(bian)(bian)量(liang)(liang)優化成寄存器(qi)變(bian)(bian)量(liang)(liang)。(C89標(biao)準(zhun)新增(zeng))
流程控制關鍵字
return:用在函(han)(han)數(shu)體中,返回特定值(如果是void類型,則不返回函(han)(han)數(shu)值)。(K&R時期引入)
continue:結(jie)束當前循環(huan),開始下(xia)一輪循環(huan)。(K&R時期引入)
break:跳(tiao)出當(dang)前循環或switch結構。(K&R時期引入(ru))
goto:無條件(jian)跳轉語句。(K&R時期引入)
分支結構
if:條(tiao)件語(yu)句(ju),后(hou)面不需要(yao)放分號。(K&R時期引入(ru))
else:條件(jian)語句否定(ding)分支(與if連用)。(K&R時(shi)期引入)
switch:開(kai)關語(yu)句(多重分支語(yu)句)。(K&R時期引入(ru))
case:開關語(yu)句中的分支(zhi)標記(ji),與switch連用(yong)。(K&R時(shi)期引入)
default:開關語句中的“其(qi)他”分支,可選。(K&R時期引入)
語法結構
順序結構
順序(xu)結構的(de)程序(xu)設(she)計(ji)是最(zui)簡單的(de),只要按照(zhao)解決問題的(de)順序(xu)寫出相(xiang)應(ying)的(de)語(yu)句就行(xing),它的(de)執行(xing)順序(xu)是自上(shang)而(er)下(xia),依(yi)次執行(xing)。
例(li)如(ru):a=3,b=5,現(xian)交換a、b的(de)(de)(de)值(zhi),這個(ge)問題(ti)就好像(xiang)交換兩個(ge)杯子里面的(de)(de)(de)水(shui),這當(dang)然(ran)要用到(dao)第三個(ge)杯子,假如(ru)第三個(ge)杯子是c,那么正確的(de)(de)(de)程序(xu)(xu)(xu)為:c=a;a=b;b=c,執行結果(guo)是a=5,b=c=3,如(ru)果(guo)改(gai)變其順(shun)(shun)序(xu)(xu)(xu),寫成:a=b;c=a;b=c;則(ze)執行結果(guo)就變成a=b=c=5,不(bu)能達到(dao)預期的(de)(de)(de)目的(de)(de)(de),初(chu)學(xue)者最容易犯這種錯誤。順(shun)(shun)序(xu)(xu)(xu)結構(gou)(gou)可以獨立(li)使用構(gou)(gou)成一個(ge)簡單的(de)(de)(de)完整程序(xu)(xu)(xu),常(chang)見的(de)(de)(de)輸(shu)(shu)入、計(ji)算(suan)、輸(shu)(shu)出(chu)三步(bu)曲的(de)(de)(de)程序(xu)(xu)(xu)就是順(shun)(shun)序(xu)(xu)(xu)結構(gou)(gou),例(li)如(ru)計(ji)算(suan)圓(yuan)的(de)(de)(de)面積(ji),其程序(xu)(xu)(xu)的(de)(de)(de)語(yu)句順(shun)(shun)序(xu)(xu)(xu)就是輸(shu)(shu)入圓(yuan)的(de)(de)(de)半徑r,計(ji)算(suan)s=3.14159*r*r,輸(shu)(shu)出(chu)圓(yuan)的(de)(de)(de)面積(ji)s。不(bu)過大(da)多(duo)數(shu)情況(kuang)下(xia)順(shun)(shun)序(xu)(xu)(xu)結構(gou)(gou)都是作為程序(xu)(xu)(xu)的(de)(de)(de)一部分,與其它結構(gou)(gou)一起(qi)構(gou)(gou)成一個(ge)復雜(za)的(de)(de)(de)程序(xu)(xu)(xu),例(li)如(ru)分支(zhi)結構(gou)(gou)中的(de)(de)(de)復合語(yu)句、循(xun)環結構(gou)(gou)中的(de)(de)(de)循(xun)環體等。
選擇結構
順(shun)序(xu)(xu)(xu)結(jie)構的(de)程(cheng)(cheng)序(xu)(xu)(xu)雖然(ran)能解(jie)(jie)決計(ji)算、輸(shu)出等(deng)問(wen)題(ti),但(dan)不(bu)(bu)能做判斷再(zai)(zai)選(xuan)(xuan)擇(ze)(ze)(ze)(ze)(ze)。對(dui)于(yu)要先做判斷再(zai)(zai)選(xuan)(xuan)擇(ze)(ze)(ze)(ze)(ze)的(de)問(wen)題(ti)就要使用選(xuan)(xuan)擇(ze)(ze)(ze)(ze)(ze)結(jie)構。選(xuan)(xuan)擇(ze)(ze)(ze)(ze)(ze)結(jie)構的(de)執(zhi)行是依據(ju)一定的(de)條件選(xuan)(xuan)擇(ze)(ze)(ze)(ze)(ze)執(zhi)行路(lu)徑,而不(bu)(bu)是嚴格按照(zhao)語句(ju)出現的(de)物理(li)順(shun)序(xu)(xu)(xu)。選(xuan)(xuan)擇(ze)(ze)(ze)(ze)(ze)結(jie)構的(de)程(cheng)(cheng)序(xu)(xu)(xu)設計(ji)方法的(de)關(guan)鍵在(zai)于(yu)構造(zao)合適的(de)分支條件和分析(xi)程(cheng)(cheng)序(xu)(xu)(xu)流(liu)程(cheng)(cheng),根(gen)(gen)據(ju)不(bu)(bu)同的(de)程(cheng)(cheng)序(xu)(xu)(xu)流(liu)程(cheng)(cheng)選(xuan)(xuan)擇(ze)(ze)(ze)(ze)(ze)適當的(de)選(xuan)(xuan)擇(ze)(ze)(ze)(ze)(ze)語句(ju)。選(xuan)(xuan)擇(ze)(ze)(ze)(ze)(ze)結(jie)構適合于(yu)帶有邏輯或關(guan)系比較等(deng)條件判斷的(de)計(ji)算,設計(ji)這類程(cheng)(cheng)序(xu)(xu)(xu)時往往都要先繪制其程(cheng)(cheng)序(xu)(xu)(xu)流(liu)程(cheng)(cheng)圖(tu),然(ran)后根(gen)(gen)據(ju)程(cheng)(cheng)序(xu)(xu)(xu)流(liu)程(cheng)(cheng)寫出源程(cheng)(cheng)序(xu)(xu)(xu),這樣做把程(cheng)(cheng)序(xu)(xu)(xu)設計(ji)分析(xi)與語言分開,使得(de)問(wen)題(ti)簡單化,易于(yu)理(li)解(jie)(jie)。程(cheng)(cheng)序(xu)(xu)(xu)流(liu)程(cheng)(cheng)圖(tu)是根(gen)(gen)據(ju)解(jie)(jie)題(ti)分析(xi)所繪制的(de)程(cheng)(cheng)序(xu)(xu)(xu)執(zhi)行流(liu)程(cheng)(cheng)圖(tu)。
循環結構
循環(huan)(huan)結構可以減少(shao)源程序(xu)重(zhong)復(fu)書寫的(de)(de)工作量,用來(lai)(lai)描述(shu)重(zhong)復(fu)執行某段算(suan)法的(de)(de)問(wen)題,這是程序(xu)設計(ji)中最能發揮計(ji)算(suan)機特長的(de)(de)程序(xu)結構,C語言中提供(gong)四種循環(huan)(huan),即goto循環(huan)(huan)、while循環(huan)(huan)、do while循環(huan)(huan)和for循環(huan)(huan)。四種循環(huan)(huan)可以用來(lai)(lai)處(chu)理同一(yi)問(wen)題,一(yi)般(ban)情況下它們可以互相代替換,但一(yi)般(ban)不(bu)提倡用goto循環(huan)(huan),因為強制改變(bian)程序(xu)的(de)(de)順序(xu)經常會(hui)給程序(xu)的(de)(de)運行帶來(lai)(lai)不(bu)可預料的(de)(de)錯誤。
特別要(yao)注意在(zai)循(xun)環體內應包含趨(qu)于結束的(de)語句(即循(xun)環變(bian)量值的(de)改(gai)變(bian)),否(fou)則就可(ke)能成了一個死循(xun)環,這是初學(xue)者的(de)一個常見(jian)錯誤。
三(san)個(ge)循(xun)(xun)(xun)環(huan)(huan)(huan)的(de)(de)(de)異同點:用(yong)while和do while循(xun)(xun)(xun)環(huan)(huan)(huan)時,循(xun)(xun)(xun)環(huan)(huan)(huan)變量的(de)(de)(de)初(chu)始化的(de)(de)(de)操作(zuo)應在循(xun)(xun)(xun)環(huan)(huan)(huan)體之前,而(er)(er)(er)for循(xun)(xun)(xun)環(huan)(huan)(huan)一般在語句1中進行的(de)(de)(de);while循(xun)(xun)(xun)環(huan)(huan)(huan)和for循(xun)(xun)(xun)環(huan)(huan)(huan)都是(shi)先(xian)判(pan)(pan)斷(duan)表(biao)達式,后(hou)執(zhi)行循(xun)(xun)(xun)環(huan)(huan)(huan)體,而(er)(er)(er)do while循(xun)(xun)(xun)環(huan)(huan)(huan)是(shi)先(xian)執(zhi)行循(xun)(xun)(xun)環(huan)(huan)(huan)體后(hou)判(pan)(pan)斷(duan)表(biao)達式,也就是(shi)說do while的(de)(de)(de)循(xun)(xun)(xun)環(huan)(huan)(huan)體最少被(bei)執(zhi)行一次(ci),而(er)(er)(er)while循(xun)(xun)(xun)環(huan)(huan)(huan)和for就可能(neng)一次(ci)都不執(zhi)行。另(ling)外還(huan)要注意的(de)(de)(de)是(shi)這三(san)種(zhong)循(xun)(xun)(xun)環(huan)(huan)(huan)都可以用(yong)break語句跳(tiao)出循(xun)(xun)(xun)環(huan)(huan)(huan),用(yong)continue語句結(jie)束(shu)本次(ci)循(xun)(xun)(xun)環(huan)(huan)(huan),而(er)(er)(er)goto語句與(yu)if構成的(de)(de)(de)循(xun)(xun)(xun)環(huan)(huan)(huan),是(shi)不能(neng)用(yong)break和continue語句進行控制的(de)(de)(de)。
順(shun)序(xu)(xu)結(jie)(jie)構(gou)、分(fen)支結(jie)(jie)構(gou)和循(xun)(xun)環(huan)結(jie)(jie)構(gou)并不彼此孤立的,在循(xun)(xun)環(huan)中(zhong)可(ke)(ke)以有分(fen)支、順(shun)序(xu)(xu)結(jie)(jie)構(gou),分(fen)支中(zhong)也可(ke)(ke)以有循(xun)(xun)環(huan)、順(shun)序(xu)(xu)結(jie)(jie)構(gou),其實(shi)不管哪種結(jie)(jie)構(gou),均可(ke)(ke)廣義的把(ba)它們看成一個(ge)語句。在實(shi)際編程(cheng)過程(cheng)中(zhong)常將(jiang)這三種結(jie)(jie)構(gou)相互結(jie)(jie)合以實(shi)現各種算法(fa),設(she)(she)計出相應(ying)程(cheng)序(xu)(xu),但是要編程(cheng)的問(wen)題較大,編寫出的程(cheng)序(xu)(xu)就(jiu)往往很長、結(jie)(jie)構(gou)重復(fu)多,造(zao)成可(ke)(ke)讀性差,難以理解(jie),解(jie)決這個(ge)問(wen)題的方法(fa)是將(jiang)C程(cheng)序(xu)(xu)設(she)(she)計成模塊(kuai)化結(jie)(jie)構(gou)。
具體內容:
for循環
for循(xun)環(huan)結構是c語(yu)言中(zhong)最(zui)具有特(te)色(se)的(de)循(xun)環(huan)語(yu)句,使用最(zui)為靈活方便,它的(de)一般形(xing)式為:
for(表達式(shi)1;表達式(shi)2;表達式(shi)3)循(xun)環(huan)體語句。(其(qi)中;不能省(sheng)略)
表達式1為初值(zhi)表達式,用于在循(xun)環開始前為循(xun)環變(bian)量賦初值(zhi)。
表達式2是循(xun)(xun)環(huan)控制(zhi)邏輯表達式,它(ta)控制(zhi)循(xun)(xun)環(huan)執行的條(tiao)件,決定循(xun)(xun)環(huan)的次數。
表達(da)式3為(wei)循環控(kong)制變(bian)量修改表達(da)式,它(ta)使for循環趨向結束。
循環(huan)體(ti)語句是在循環(huan)控制條(tiao)件成立的情況(kuang)下被反(fan)復執行的語句。
但是在(zai)整個for循(xun)環過程(cheng)中,表達式(shi)1只計算一(yi)次(ci)(ci),表達式(shi)2和表達式(shi)3則(ze)可能計算多(duo)次(ci)(ci),也可能一(yi)次(ci)(ci)也不計算。循(xun)環體(ti)可能多(duo)次(ci)(ci)執行(xing),也可能一(yi)次(ci)(ci)都不執行(xing)。
先執(zhi)(zhi)行表達式2,然后(hou)執(zhi)(zhi)行循環結構,最后(hou)表達式3,一直這(zhe)樣循環下(xia)去。
for循環語句是c語言種功能最(zui)為(wei)強大的(de)語句,甚至在(zai)一定程度上(shang)可以代替其他的(de)循環語句。
do
do循(xun)環結構(gou),do 1 while(2);的執(zhi)行順(shun)序是1->2->1...循(xun)環,2為循(xun)環條件。
while
while循(xun)環(huan)結構,while(1)2;的執行順序(xu)是(shi)1->2->1...循(xun)環(huan),1為(wei)循(xun)環(huan)條件
以上循(xun)環語句,當循(xun)環條件表達式為真則繼續循(xun)環,為假則跳出循(xun)環。
函數
C程序(xu)是(shi)(shi)由(you)一組變量或(huo)是(shi)(shi)函(han)(han)(han)數(shu)(shu)的(de)(de)外(wai)部(bu)對象組成(cheng)(cheng)的(de)(de)。函(han)(han)(han)數(shu)(shu)是(shi)(shi)一個自我(wo)包含的(de)(de)完成(cheng)(cheng)一定(ding)相(xiang)關(guan)功能的(de)(de)執行代碼段。我(wo)們可以(yi)把函(han)(han)(han)數(shu)(shu)看(kan)成(cheng)(cheng)一個“黑(hei)盒子”,你只(zhi)要將數(shu)(shu)據(ju)送進去就(jiu)能得(de)到結果(guo),而函(han)(han)(han)數(shu)(shu)內部(bu)究竟是(shi)(shi)如何工作的(de)(de),外(wai)部(bu)程序(xu)是(shi)(shi)不知道的(de)(de)。外(wai)部(bu)程序(xu)所知道的(de)(de)僅限于(yu)輸(shu)(shu)入給函(han)(han)(han)數(shu)(shu)什(shen)么(me)以(yi)及(ji)函(han)(han)(han)數(shu)(shu)輸(shu)(shu)出什(shen)么(me)。函(han)(han)(han)數(shu)(shu)提供了編(bian)制程序(xu)的(de)(de)手段,使之容(rong)易(yi)讀、寫、理(li)解、排除錯誤、修(xiu)改和(he)維護(hu)。
C程序(xu)中函(han)(han)數(shu)的數(shu)目實際上是不(bu)限的,如果說(shuo)有(you)什么限制的話,那就是,一(yi)(yi)個C程序(xu)中必須至少有(you)一(yi)(yi)個函(han)(han)數(shu),而且其(qi)中必須有(you)一(yi)(yi)個并(bing)且僅有(you)一(yi)(yi)個以(yi)main為名(ming)的函(han)(han)數(shu),這個函(han)(han)數(shu)稱為主(zhu)函(han)(han)數(shu),整個程序(xu)從(cong)這個主(zhu)函(han)(han)數(shu)開始(shi)執行(xing)。
C語(yu)言(yan)程(cheng)序鼓勵和提倡人們把(ba)一個大問題(ti)(ti)劃分(fen)成一個個子(zi)問題(ti)(ti),對應(ying)于解決一個子(zi)問題(ti)(ti)編制(zhi)一個函(han)(han)(han)數(shu)(shu),因此(ci),C語(yu)言(yan)程(cheng)序一般是由大量的小(xiao)函(han)(han)(han)數(shu)(shu)而(er)不是由少量大函(han)(han)(han)數(shu)(shu)構(gou)成的,即所謂(wei)“小(xiao)函(han)(han)(han)數(shu)(shu)構(gou)成大程(cheng)序”。這樣的好處(chu)是讓各(ge)部分(fen)相互充(chong)分(fen)獨立(li),并且任(ren)務單一。因而(er)這些充(chong)分(fen)獨立(li)的小(xiao)模塊也可以作為一種固定規格的小(xiao)“構(gou)件(jian)”,用來構(gou)成新的大程(cheng)序。
C語(yu)言發展的(de)那么多年來,用C語(yu)言開(kai)發的(de)系統和程(cheng)序浩如煙海。在發展的(de)同時也積累(lei)了很多能直接(jie)使用的(de)庫函數(shu)。
ANSI C提(ti)供了標準(zhun)C語言(yan)庫函(han)數。
C語言初(chu)學者比較(jiao)喜歡的(de)Turbo C 2.0提(ti)供了400多個(ge)運行時函(han)數(shu),每(mei)個(ge)函(han)數(shu)都(dou)完成特(te)定的(de)功能,用(yong)戶可隨意調用(yong)。這(zhe)些(xie)函(han)數(shu)總體分成輸入輸出(chu)函(han)數(shu)、數(shu)學函(han)數(shu)、字符串和內(nei)存函(han)數(shu)、與BIOS和DOS有關(guan)的(de)函(han)數(shu)、字符屏幕和圖形功能函(han)數(shu)、過程(cheng)控制函(han)數(shu)、目(mu)錄函(han)數(shu)等。
Windows系統(tong)所提(ti)供(gong)的Windows SDK中包含了(le)數(shu)(shu)千個(ge)跟(gen)Windows應(ying)用程序開發相關的函數(shu)(shu)。其它操作系統(tong),如Linux,也同樣(yang)提(ti)供(gong)了(le)大量的函數(shu)(shu)讓應(ying)用程序開發人(ren)員調用。
作(zuo)為(wei)程序(xu)員應(ying)(ying)盡量(liang)(liang)熟(shu)(shu)悉目標平(ping)臺庫(ku)函(han)數其功能。這樣才(cai)能游刃有(you)余(yu)地開(kai)發特定平(ping)臺的(de)應(ying)(ying)用程序(xu)。比(bi)如作(zuo)為(wei)Windows應(ying)(ying)用程序(xu)的(de)開(kai)發者,應(ying)(ying)盡量(liang)(liang)熟(shu)(shu)悉Windows SDK;作(zuo)為(wei)Linux應(ying)(ying)用程序(xu)開(kai)發者,應(ying)(ying)盡量(liang)(liang)熟(shu)(shu)悉Linux系(xi)統調用和POSIX函(han)數規范。
運算符號
比較特(te)(te)別的是,比特(te)(te)右(you)移(>>)運(yun)算(suan)(suan)符(fu)可以(yi)是算(suan)(suan)術(shu)(shu)(左端(duan)補最高有效位)或是邏(luo)輯(ji)(左端(duan)補0)位移。例如,將11100011右(you)移3比特(te)(te),算(suan)(suan)術(shu)(shu)右(you)移后(hou)成為(wei)11111100,邏(luo)輯(ji)右(you)移則為(wei)00011100。因算(suan)(suan)術(shu)(shu)比特(te)(te)右(you)移較適于處理(li)帶負(fu)號整數,所以(yi)幾乎(hu)所有的編譯器都是算(suan)(suan)術(shu)(shu)比特(te)(te)右(you)移。
運(yun)算(suan)符(fu)(fu)(fu)的優先級(ji)從高到低(di)大致是:單目運(yun)算(suan)符(fu)(fu)(fu)、算(suan)術運(yun)算(suan)符(fu)(fu)(fu)、關系運(yun)算(suan)符(fu)(fu)(fu)、邏輯運(yun)算(suan)符(fu)(fu)(fu)、條件(jian)運(yun)算(suan)符(fu)(fu)(fu)、賦值運(yun)算(suan)符(fu)(fu)(fu)(=)和(he)逗號運(yun)算(suan)符(fu)(fu)(fu)。
GCC,GNU組織開發的(de)開源(yuan)免費的(de)編(bian)譯器
MinGW,Windows操(cao)作系統(tong)下的(de)GCC
Clang,開源(yuan)的BSD協議的基于LLVM的編譯器
Visual C++ :: cl.exe,Microsoft VC++自帶的(de)編譯器
Code::Blocks,開源免費的C/C++ IDE
CodeLite,開(kai)源(yuan)、跨平臺(tai)的C/C++集成開(kai)發(fa)環(huan)境(jing)
Dev-C++,可(ke)移植的C/C++IDE
C-Free
Light Table
Visual Studio系列
C語(yu)言是(shi)一種結(jie)構化語(yu)言,它有著清晰的(de)(de)(de)(de)(de)層次,可(ke)按照模(mo)塊的(de)(de)(de)(de)(de)方(fang)式對程序(xu)進行編寫,十分(fen)有利于(yu)程序(xu)的(de)(de)(de)(de)(de)調試,且c語(yu)言的(de)(de)(de)(de)(de)處理和表現(xian)能(neng)力都非常的(de)(de)(de)(de)(de)強大,依靠(kao)非常全(quan)面的(de)(de)(de)(de)(de)運算符和多樣的(de)(de)(de)(de)(de)數(shu)據類型(xing),可(ke)以輕易完成各種數(shu)據結(jie)構的(de)(de)(de)(de)(de)構建,通過指(zhi)針類型(xing)更可(ke)對內存直接(jie)尋(xun)址以及對硬件(jian)進行直接(jie)操作,因(yin)此既(ji)能(neng)夠用(yong)于(yu)開發系統程序(xu),也(ye)可(ke)用(yong)于(yu)開發應用(yong)軟件(jian)。通過對C語(yu)言進行研究分(fen)析,總結(jie)出其主要特(te)點如下(xia):
(1)簡潔的語(yu)言
C語言包(bao)含的(de)(de)各種控(kong)制語句僅(jin)有9種,關(guan)鍵字也只(zhi)有32個,程序(xu)的(de)(de)編(bian)寫(xie)要求不(bu)嚴格且(qie)(qie)以小寫(xie)字母為主(zhu),對許多(duo)不(bu)必要的(de)(de)部分進行了(le)精簡。實際上(shang),語句構(gou)成與(yu)硬件(jian)有關(guan)聯的(de)(de)較少,且(qie)(qie)C語言本身不(bu)提供(gong)與(yu)硬件(jian)相關(guan)的(de)(de)輸入輸出、文件(jian)管(guan)理等功能(neng),如(ru)需此(ci)類功能(neng),需要通過(guo)配合編(bian)譯系統所支(zhi)持的(de)(de)各類庫進行編(bian)程,故c語言擁有非常簡潔的(de)(de)編(bian)譯系統。
(2)具有結構化的控制語句
C語(yu)言(yan)是一種結構化的(de)(de)語(yu)言(yan),提供(gong)的(de)(de)控制語(yu)句(ju)具有(you)結構化特征,如for語(yu)句(ju)、if...else語(yu)句(ju)和switch語(yu)句(ju)等。可以用(yong)于(yu)實現函數(shu)的(de)(de)邏輯控制,方(fang)便面(mian)向過程的(de)(de)程序設計。
(3)豐富的數(shu)據(ju)類型(xing)
C語(yu)言包含的(de)數據(ju)(ju)(ju)類(lei)型(xing)廣(guang)泛,不(bu)僅包含有傳統(tong)的(de)字符型(xing)、整型(xing)、浮點(dian)型(xing)、數組類(lei)型(xing)等數據(ju)(ju)(ju)類(lei)型(xing),還具(ju)有其(qi)他編(bian)(bian)程(cheng)語(yu)言所不(bu)具(ju)備的(de)數據(ju)(ju)(ju)類(lei)型(xing),其(qi)中(zhong)以(yi)指(zhi)針類(lei)型(xing)數據(ju)(ju)(ju)使(shi)用最為靈活(huo),可以(yi)通過編(bian)(bian)程(cheng)對各種數據(ju)(ju)(ju)結構進行計算。
(4)豐富的運算符
C語言包(bao)含34個運算(suan)符(fu),它將(jiang)賦值(zhi)、括(kuo)號(hao)等均視作運算(suan)符(fu)來操作,使C程序的表達(da)式類(lei)型和運算(suan)符(fu)類(lei)型均非常豐富。
(5)可對物理地址(zhi)進行(xing)直接操作
C語(yu)言(yan)允許對(dui)硬件(jian)(jian)內存地址(zhi)進行直接讀寫,以此可以實(shi)現匯編(bian)語(yu)言(yan)的(de)主要功能(neng),并可直接操作硬件(jian)(jian)。C語(yu)言(yan)不(bu)但(dan)具備高級(ji)語(yu)言(yan)所具有(you)的(de)良好(hao)特性,又包含了許多低級(ji)語(yu)言(yan)的(de)優勢,故在系統軟件(jian)(jian)編(bian)程(cheng)領(ling)域有(you)著(zhu)廣(guang)泛的(de)應(ying)用。
(6)代碼具(ju)有(you)較好(hao)的可移植性
C語(yu)言(yan)是面向(xiang)過程的(de)編程語(yu)言(yan),用(yong)戶只需(xu)要(yao)關注所被(bei)解(jie)(jie)決問題的(de)本(ben)身(shen),而不需(xu)要(yao)花費過多的(de)精力(li)去了解(jie)(jie)相關硬件,且針對不同的(de)硬件環境,在(zai)用(yong)C語(yu)言(yan)實現相同功能時的(de)代碼(ma)基本(ben)一(yi)致(zhi),不需(xu)或僅需(xu)進行少量(liang)改(gai)動(dong)便可(ke)(ke)完成移(yi)植(zhi),這就意味著,對于一(yi)臺計算機編寫的(de)C程序可(ke)(ke)以在(zai)另一(yi)臺計算機上輕松地運行,從而極大的(de)減少了程序移(yi)植(zhi)的(de)工作強度。
(7)可生成高質量、目標(biao)代(dai)碼執行效率高的程序
與(yu)其他高(gao)(gao)(gao)級(ji)語言相比(bi),C語言可以生成高(gao)(gao)(gao)質(zhi)量和高(gao)(gao)(gao)效率的(de)目標代(dai)碼,故通常應用于對代(dai)碼質(zhi)量和執行效率要(yao)求較高(gao)(gao)(gao)的(de)嵌入式系統程序的(de)編寫。
C語言是普適(shi)性(xing)最(zui)強(qiang)的(de)(de)一種(zhong)計算機(ji)程序(xu)編(bian)輯語言,它(ta)不(bu)僅可以(yi)發揮出高(gao)級編(bian)程語言的(de)(de)功(gong)用,還(huan)具(ju)(ju)有匯編(bian)語言的(de)(de)優點(dian),因此相對(dui)于其它(ta)編(bian)程語言,它(ta)具(ju)(ju)有自己(ji)獨特的(de)(de)特點(dian)。具(ju)(ju)體體現(xian)為以(yi)下(xia)三個(ge)方面:
其(qi)一(yi),廣(guang)泛性。C語(yu)言的(de)運算(suan)范圍(wei)的(de)大(da)小直(zhi)接決定了(le)其(qi)優劣性。C語(yu)言中(zhong)包含了(le)34種運算(suan)符(fu),因此(ci)運算(suan)范圍(wei)要超(chao)出許(xu)多(duo)其(qi)它語(yu)言,此(ci)外其(qi)運算(suan)結果(guo)的(de)表達形(xing)式也十分豐富。此(ci)外,C語(yu)言包含了(le)字符(fu)型、指針型等多(duo)種數(shu)(shu)據結構形(xing)式,因此(ci),更為龐大(da)的(de)數(shu)(shu)據結構運算(suan)它也可(ke)以應付(fu)。
其二,簡潔性。9類(lei)控制(zhi)語(yu)句和32個(ge)關鍵(jian)字是C語(yu)言所具(ju)有(you)的(de)基礎特性,使得其在計算(suan)機應(ying)用程(cheng)序編寫中具(ju)有(you)廣(guang)泛的(de)適用性,不(bu)僅(jin)可以適用廣(guang)大編程(cheng)人員(yuan)的(de)操作(zuo),提高其工作(zuo)效率,同時還能夠(gou)支(zhi)持高級編程(cheng),避(bi)免了語(yu)言切換的(de)繁瑣。
其三,結構完(wan)善。C語(yu)言是一種(zhong)結構化語(yu)言,它可以通過組建模(mo)(mo)塊(kuai)單位的形(xing)式實現模(mo)(mo)塊(kuai)化的應(ying)用程(cheng)(cheng)序,在系統(tong)描述方面具有(you)顯著(zhu)優(you)勢,同時這一特性也使得(de)它能夠適應(ying)多(duo)種(zhong)不同的編程(cheng)(cheng)要求,且執(zhi)行效率高。
1.C語言(yan)的(de)(de)缺點主要(yao)表現為數據的(de)(de)封裝性(xing)弱,這一點使得C在(zai)數據的(de)(de)安全性(xing)上有很大缺陷,這也是(shi)C和C++的(de)(de)一大區別。
2.C語言的語法限(xian)制不(bu)(bu)(bu)太嚴格,對變(bian)量的類型約束不(bu)(bu)(bu)嚴格,影(ying)響程序(xu)的安全性,對數組(zu)下(xia)標越界不(bu)(bu)(bu)作(zuo)檢(jian)查等。從應(ying)用的角度,C語言比其他高級(ji)語言較(jiao)難(nan)掌握。也就是說,對用C語言的人,要求(qiu)對程序(xu)設計更熟練一些。