引言
C語(yǔ)言是一門(mén)面向過(guò)程的、抽象化的通用程序設(shè)計(jì)語(yǔ)言,廣泛應(yīng)用于底層開(kāi)發(fā)。它在編程語(yǔ)言中具有舉足輕重的地位。
此文為【C語(yǔ)言必知必會(huì)】系列第一篇,帶你初步了解C語(yǔ)言,為之后的學(xué)習(xí)打下基礎(chǔ)
1??發(fā)展歷史
C語(yǔ)言起源于美國(guó)貝爾實(shí)驗(yàn)室的貝爾實(shí)驗(yàn)室,由丹尼斯·里奇和肯尼斯·湯普森于20世紀(jì)70年代初期開(kāi)發(fā)而成。起初,他們使用B語(yǔ)言對(duì)UNIX操作系統(tǒng)進(jìn)行了改進(jìn),并逐步將其重寫(xiě)成了C語(yǔ)言。
隨著UNIX的發(fā)展,C語(yǔ)言也得到了不斷的完善和推廣。為了確立C語(yǔ)言的標(biāo)準(zhǔn),許多專(zhuān)家、學(xué)者和硬件廠商參與組建了C語(yǔ)言標(biāo)準(zhǔn)委員會(huì)。1989年,他們發(fā)布了第一個(gè)完整的C語(yǔ)言標(biāo)準(zhǔn),即ANSI C(C89)。
隨后,C語(yǔ)言標(biāo)準(zhǔn)經(jīng)歷了多次修訂和更新。1999年發(fā)布了C99標(biāo)準(zhǔn),其中包含了一些新的特性和語(yǔ)法改進(jìn)。2011年發(fā)布了C11標(biāo)準(zhǔn),進(jìn)一步擴(kuò)展了C語(yǔ)言的功能和表達(dá)能力。
C語(yǔ)言以其簡(jiǎn)潔、高效、可移植性和廣泛應(yīng)用性而聞名。它成為了許多編程領(lǐng)域的首選語(yǔ)言,包括系統(tǒng)級(jí)編程、嵌入式系統(tǒng)開(kāi)發(fā)、操作系統(tǒng)設(shè)計(jì)等。 許多重要的軟件和工具,如UNIX、Linux和MySQL等,都是使用C語(yǔ)言開(kāi)發(fā)的。
截至目前,在計(jì)算機(jī)科學(xué)和軟件工程領(lǐng)域,C語(yǔ)言仍然是一門(mén)重要且廣泛應(yīng)用的編程語(yǔ)言,對(duì)后續(xù)語(yǔ)言的發(fā)展也產(chǎn)生了深遠(yuǎn)的影響。
2??語(yǔ)言特點(diǎn)
C語(yǔ)言是一種結(jié)構(gòu)化語(yǔ)言,它有著清晰的層次,可按照模塊的方式對(duì)程序進(jìn)行編寫(xiě),十分有利于程序的調(diào)試,且c語(yǔ)言的處理和表現(xiàn)能力都非常的強(qiáng)大,依靠非常全面的運(yùn)算符和多樣的數(shù)據(jù)類(lèi)型,可以輕易完成各種數(shù)據(jù)結(jié)構(gòu)的構(gòu)建,通過(guò)指針類(lèi)型更可對(duì)內(nèi)存直接尋址以及對(duì)硬件進(jìn)行直接操作,因此既能夠用于開(kāi)發(fā)系統(tǒng)程序,也可用于開(kāi)發(fā)應(yīng)用軟件。
C語(yǔ)言具有以下幾個(gè)主要的語(yǔ)言特點(diǎn):
1.C語(yǔ)言的語(yǔ)法相對(duì)簡(jiǎn)單,并且提供了一些核心的編程結(jié)構(gòu),使得程序員可以用更少的代碼實(shí)現(xiàn)功能。C語(yǔ)言的底層控制和內(nèi)存管理能力使其在編寫(xiě)高效的程序時(shí)具有優(yōu)勢(shì)。
2.C語(yǔ)言是一種面向過(guò)程的編程語(yǔ)言,它側(cè)重于按照順序執(zhí)行一系列操作步驟,通過(guò)函數(shù)調(diào)用和模塊化的方式組織代碼。這種特點(diǎn)使得C語(yǔ)言非常適合系統(tǒng)級(jí)編程和底層開(kāi)發(fā)。
3.可移植性強(qiáng):C語(yǔ)言的標(biāo)準(zhǔn)化以及對(duì)底層硬件的直接訪問(wèn)使得它在不同平臺(tái)和操作系統(tǒng)上具有很高的可移植性。C語(yǔ)言編寫(xiě)的程序通常可以在多個(gè)系統(tǒng)上進(jìn)行編譯和運(yùn)行。
4.C語(yǔ)言提供了指針的概念,允許直接訪問(wèn)和操作內(nèi)存地址。 這為程序員提供了更高的靈活性和對(duì)底層資源的直接控制能力。
5.C語(yǔ)言提供了廣泛的標(biāo)準(zhǔn)庫(kù),包含了大量的函數(shù)和工具,可以方便地進(jìn)行文件操作、字符串處理、內(nèi)存分配等常見(jiàn)任務(wù)。
總而言之,C語(yǔ)言以其簡(jiǎn)潔
、高效
、可移植
和底層控制能力
而聞名,成為廣泛應(yīng)用于系統(tǒng)級(jí)編程、嵌入式開(kāi)發(fā)和底層軟件開(kāi)發(fā)的重要語(yǔ)言。
3??語(yǔ)言組成
數(shù)據(jù)類(lèi)型:
C語(yǔ)言中的數(shù)據(jù)類(lèi)型用來(lái)定義變量的性質(zhì)和存儲(chǔ)空間的大小。常見(jiàn)的數(shù)據(jù)類(lèi)型包括整型(int)
、浮點(diǎn)型(float、double)
、字符型(char)
,以及派生的復(fù)雜數(shù)據(jù)類(lèi)型如結(jié)構(gòu)體(struct)
和枚舉(enum)
等。
常量與變量:
在C語(yǔ)言中,常量是指在程序執(zhí)行期間值不會(huì)改變的數(shù)據(jù)。常量可以是字面值(如整數(shù)、浮點(diǎn)數(shù)、字符等)或使用const關(guān)鍵字進(jìn)行聲明。變量是用于存儲(chǔ)和表示可變數(shù)據(jù)的標(biāo)識(shí)符。 在使用變量之前,需要先聲明并指定其數(shù)據(jù)類(lèi)型。
注意: 變量名是由字母、數(shù)字和下劃線組成
的標(biāo)識(shí)符,且不能以數(shù)字開(kāi)頭
。變量名區(qū)分大小寫(xiě),例如myVariable和myvariable是不同的變量名。
數(shù)組:
數(shù)組是相同數(shù)據(jù)類(lèi)型的元素按一定次序排列而成的集合。在C語(yǔ)言中,數(shù)組使用方括號(hào)[]
來(lái)聲明,并通過(guò)下標(biāo)訪問(wèn)其中的元素。數(shù)組的大小在聲明時(shí)確定,并且下標(biāo)從0開(kāi)始。
指針:
指針是用來(lái)存儲(chǔ)變量地址的變量。通過(guò)指針,我們可以直接訪問(wèn)和操作內(nèi)存中的數(shù)據(jù)。在C語(yǔ)言中,可以使用星號(hào)*
來(lái)聲明指針變量,并通過(guò)取地址運(yùn)算符&
獲取變量的地址,或者通過(guò)解引用運(yùn)算符*
訪問(wèn)指針指向的值。
字符串:
字符串是由字符組成的數(shù)組,以空字符'\0'
作為結(jié)束標(biāo)志。在C語(yǔ)言中,可以使用字符數(shù)組或者指針來(lái)表示字符串,并通過(guò)一系列的字符串操作函數(shù)(如strcpy、strlen等)進(jìn)行處理。
運(yùn)算符:
C語(yǔ)言提供了各種各樣的運(yùn)算符,用于完成不同類(lèi)型的運(yùn)算任務(wù)。常見(jiàn)的運(yùn)算符包括算術(shù)運(yùn)算符(+、-、*、/等)、關(guān)系運(yùn)算符(<、>、==等)、邏輯運(yùn)算符(&&、||、!等)等。
算術(shù)運(yùn)算符>邏輯運(yùn)算符>賦值運(yùn)算符
例如,表達(dá)式a + b * c
中,乘法運(yùn)算符的優(yōu)先級(jí)高于加法運(yùn)算符,所以先計(jì)算b * c
,然后再與a
相加。如果要先計(jì)算a + b
,可以使用括號(hào)來(lái)改變優(yōu)先級(jí),如(a + b) * c
。
示例如下:
#include <stdio.h>
int main() {
int a = 10, b = 5, c = 2;
int result;
result = a + b * c; // 優(yōu)先級(jí):乘法 > 加法
printf("a + b * c = %d\n", result);
result = (a + b) * c; // 優(yōu)先級(jí):括號(hào) > 加法 > 乘法
printf("(a + b) * c = %d\n", result);
result = a / b + c; // 優(yōu)先級(jí):除法 > 加法
printf("a / b + c = %d\n", result);
result = a / (b + c); // 優(yōu)先級(jí):括號(hào) > 加法 > 除法
printf("a / (b + c) = %d\n", result);
result = a % b + c * 2; // 優(yōu)先級(jí):乘法 > 取模 > 加法
printf("a %% b + c * 2 = %d\n", result);
result = (a % b) + (c * 2); // 優(yōu)先級(jí):括號(hào) > 取模 > 乘法 > 加法
printf("(a %% b) + (c * 2) = %d\n", result);
return 0;
}
結(jié)果如下:
了解運(yùn)算符的優(yōu)先級(jí)可以幫助我們編寫(xiě)正確和清晰的表達(dá)式,并避免出現(xiàn)不必要的錯(cuò)誤。
關(guān)鍵字:
關(guān)鍵字又稱(chēng)為保留字,就是已被C語(yǔ)言本身使用,不能作其它用途使用的字。 例如關(guān)鍵字不能用作變量名、函數(shù)名等標(biāo)識(shí)符。
數(shù)據(jù)類(lèi)型關(guān)鍵字:short
:修飾int,短整型數(shù)據(jù),可省略被修飾的int。(K&R時(shí)期引入)long
:修飾int,長(zhǎng)整型數(shù)據(jù),可省略被修飾的int。(K&R時(shí)期引入)long long
:修飾int,超長(zhǎng)整型數(shù)據(jù),可省略被修飾的int。(C99標(biāo)準(zhǔn)新增)signed
:修飾整型數(shù)據(jù),有符號(hào)數(shù)據(jù)類(lèi)型。(C89標(biāo)準(zhǔn)新增)unsigned
:修飾整型數(shù)據(jù),無(wú)符號(hào)數(shù)據(jù)類(lèi)型。(K&R時(shí)期引入)restrict
:用于限定和約束指針,并表明指針是訪問(wèn)一個(gè)數(shù)據(jù)對(duì)象的初始且唯一的方式。(C99標(biāo)準(zhǔn)新增)
復(fù)雜類(lèi)型關(guān)鍵字:struct
:結(jié)構(gòu)體聲明。(K&R時(shí)期引入)union
:聯(lián)合體聲明。(K&R時(shí)期引入)enum
:枚舉聲明。(C89標(biāo)準(zhǔn)新增)typedef
:聲明類(lèi)型別名。(K&R時(shí)期引入)sizeof
:得到特定類(lèi)型或特定類(lèi)型變量的大小。(K&R時(shí)期引入)inline
:內(nèi)聯(lián)函數(shù)用于取代宏定義,會(huì)在任何調(diào)用它的地方展開(kāi)。(C99標(biāo)準(zhǔn)新增)
存儲(chǔ)級(jí)別關(guān)鍵字:auto
:指定為自動(dòng)變量,由編譯器自動(dòng)分配及釋放。通常在棧上分配。與static相反。當(dāng)變量未指定時(shí)默認(rèn)為auto。(K&R時(shí)期引入)static
:指定為靜態(tài)變量,分配在靜態(tài)變量區(qū),修飾函數(shù)時(shí),指定函數(shù)作用域?yàn)槲募?nèi)部。(K&R時(shí)期引入)register
:指定為寄存器變量,建議編譯器將變量存儲(chǔ)到寄存器中使用,也可以修飾函數(shù)形參,建議編譯器通過(guò)寄存器而不是堆棧傳遞參數(shù)。(K&R時(shí)期引入)
#include <stdio.h>
int main() {
register int i; // 聲明一個(gè)寄存器變量
for (i = 0; i < 10; i++) {
printf("%d ", i);
}
return 0;
}
在上面的代碼中,我們使用register關(guān)鍵字聲明了一個(gè)整型變量i,然后在for循環(huán)中使用它進(jìn)行迭代。
extern
:指定對(duì)應(yīng)變量為外部變量,即標(biāo)示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時(shí)在其他模塊中尋找其定義。(K&R時(shí)期引入)const
:指定變量不可被當(dāng)前線程改變(但有可能被系統(tǒng)或其他線程改變)。(C89標(biāo)準(zhǔn)新增)volatile
:指定變量的值有可能會(huì)被系統(tǒng)或其他線程改變,強(qiáng)制編譯器每次從內(nèi)存中取得該變量的值,阻止編譯器把該變量?jī)?yōu)化成寄存器變量。(C89標(biāo)準(zhǔn)新增)
這些概念是C語(yǔ)言中非常重要的基礎(chǔ)知識(shí),對(duì)于理解和編寫(xiě)C程序至關(guān)重要。
4??總結(jié)
此文為 【C語(yǔ)言必知必會(huì)】系列之第一篇 ,帶領(lǐng)讀者初步了解C語(yǔ)言,為之后的學(xué)習(xí)打下堅(jiān)實(shí)的理論基礎(chǔ)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-715879.html
后續(xù)將發(fā)布 【C語(yǔ)言必知必會(huì)】系列之第二篇:編譯器的安裝與使用,讀者可訂閱專(zhuān)欄持續(xù)跟進(jìn)專(zhuān)欄更新。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-715879.html
到了這里,關(guān)于【C語(yǔ)言必知必會(huì) | 第一篇】C語(yǔ)言入門(mén),這一篇就夠了的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!