目錄
C語(yǔ)言入門(mén)學(xué)習(xí)知識(shí)點(diǎn)整理:附帶碼源(包含注釋)、在線編譯工具等
一、C語(yǔ)言的起源
C語(yǔ)言最初是由Dennis Ritchie于1972年在貝爾實(shí)驗(yàn)室開(kāi)發(fā)的,旨在為UNIX操作系統(tǒng)提供底層的編程接口。C語(yǔ)言源自于B語(yǔ)言,后來(lái)又發(fā)展出了C++、Java、Python等眾多編程語(yǔ)言。由于其開(kāi)源和跨平臺(tái)的特性,C語(yǔ)言成為了計(jì)算機(jī)科學(xué)領(lǐng)域最廣泛使用的編程語(yǔ)言之一。
二、C語(yǔ)言的語(yǔ)法結(jié)構(gòu)C語(yǔ)言的語(yǔ)法結(jié)構(gòu)可以分為預(yù)處理器指令、庫(kù)函數(shù)、變量、數(shù)據(jù)類(lèi)型、運(yùn)算符、控制語(yǔ)句和函數(shù)等七個(gè)方面。
1.預(yù)處理器指令
預(yù)處理器指令是指在編譯之前對(duì)源代碼進(jìn)行處理的指令,通常以“#”開(kāi)頭,如#include、#define等。預(yù)處理器指令可以用來(lái)引入頭文件、定義常量等。
2.庫(kù)函數(shù)
庫(kù)函數(shù)是指由編譯器提供的函數(shù)庫(kù),包含了各種常用的函數(shù),如printf、scanf等。使用庫(kù)函數(shù)可以減少編寫(xiě)代碼的量,提高編寫(xiě)代碼的效率。
3.變量
變量是指在程序中用來(lái)存儲(chǔ)數(shù)據(jù)的容器,可以是整型、浮點(diǎn)型、字符型、指針型等多種類(lèi)型。變量需要先聲明后使用,在聲明時(shí)需要指定變量的類(lèi)型和名稱(chēng)。
4.數(shù)據(jù)類(lèi)型
C語(yǔ)言的數(shù)據(jù)類(lèi)型可以分為基本數(shù)據(jù)類(lèi)型和派生數(shù)據(jù)類(lèi)型兩類(lèi)。基本數(shù)據(jù)類(lèi)型包括整型、浮點(diǎn)型、字符型和布爾型等,派生數(shù)據(jù)類(lèi)型包括數(shù)組、結(jié)構(gòu)體、共用體和指針等。不同的數(shù)據(jù)類(lèi)型在內(nèi)存中所占用的字節(jié)數(shù)也不同。
5.運(yùn)算符
C語(yǔ)言的運(yùn)算符包括算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符等多種類(lèi)型。運(yùn)算符的作用是對(duì)變量進(jìn)行計(jì)算和比較,常用的運(yùn)算符包括+、-、*、/等。
6.控制語(yǔ)句
C語(yǔ)言的控制語(yǔ)句包括條件語(yǔ)句、循環(huán)語(yǔ)句和跳轉(zhuǎn)語(yǔ)句等,用于控制程序的執(zhí)行流程。常用的控制語(yǔ)句包括if、while、for等。
7.函數(shù)
函數(shù)是C語(yǔ)言中最基本的程序單元,可以實(shí)現(xiàn)特定的功能,提高代碼的復(fù)用性。函數(shù)需要先定義后調(diào)用,在定義函數(shù)時(shí)需要指定函數(shù)名稱(chēng)、參數(shù)和返回值類(lèi)型等。
三、C語(yǔ)言的數(shù)據(jù)類(lèi)型C語(yǔ)言的數(shù)據(jù)類(lèi)型可以分為基本數(shù)據(jù)類(lèi)型和派生數(shù)據(jù)類(lèi)型兩類(lèi)。
1.基本數(shù)據(jù)類(lèi)型
C語(yǔ)言的基本數(shù)據(jù)類(lèi)型包括整型、浮點(diǎn)型、字符型和布爾型等。
(1)整型:C語(yǔ)言中的整型分為有符號(hào)整型和無(wú)符號(hào)整型兩種。有符號(hào)整型包括char、short、int和long等,分別占1、2、4和4個(gè)字節(jié)。無(wú)符號(hào)整型包括unsigned char、unsigned short、unsigned int和unsigned long等,分別占1、2、4和4個(gè)字節(jié)。整型的取值范圍和字節(jié)數(shù)根據(jù)不同的編譯器有所不同。
(2)浮點(diǎn)型:C語(yǔ)言中的浮點(diǎn)型分為float、double和long double三種,分別占4、8和16個(gè)字節(jié)。浮點(diǎn)型用于存儲(chǔ)小數(shù),具有更高的精度和更大的取值范圍。
(3)字符型:C語(yǔ)言中的字符型用于存儲(chǔ)字符,占1個(gè)字節(jié)。字符型變量可以用單引號(hào)括起來(lái)表示,如'c'表示字符c。
(4)布爾型:C語(yǔ)言中的布爾型用于存儲(chǔ)邏輯值,包括true和false兩種取值。布爾型變量通常用于條件判斷和邏輯運(yùn)算中。
2.派生數(shù)據(jù)類(lèi)型
C語(yǔ)言的派生數(shù)據(jù)類(lèi)型包括數(shù)組、結(jié)構(gòu)體、共用體和指針等。
(1)數(shù)組:C語(yǔ)言中的數(shù)組是一種有序的數(shù)據(jù)集合,可以存儲(chǔ)相同類(lèi)型的數(shù)據(jù)。數(shù)組需要指定元素類(lèi)型和元素個(gè)數(shù),在定義數(shù)組時(shí)需要使用中括號(hào)[]指定元素個(gè)數(shù)。
(2)結(jié)構(gòu)體:C語(yǔ)言中的結(jié)構(gòu)體可以將多個(gè)不同類(lèi)型的變量組合成一個(gè)整體。結(jié)構(gòu)體需要先定義后使用,在定義時(shí)需要指定結(jié)構(gòu)體的名稱(chēng)和成員變量的類(lèi)型和名稱(chēng)等。
(3)共用體:C語(yǔ)言中的共用體是一種特殊的結(jié)構(gòu)體,所有成員變量共享同一塊內(nèi)存空間。共用體可以實(shí)現(xiàn)多種數(shù)據(jù)類(lèi)型的共享和互換。
(4)指針:C語(yǔ)言中的指針是一種特殊的變量,可以存儲(chǔ)其他變量的地址。指針變量需要指定指向的變量類(lèi)型,在使用時(shí)需要使用取地址符&和解引用符*。
四、C語(yǔ)言的函數(shù)C語(yǔ)言的函數(shù)是程序中最基本的代碼單元,可以實(shí)現(xiàn)特定的功能并提高代碼的復(fù)用性。函數(shù)需要先定義后調(diào)用,在定義函數(shù)時(shí)需要指定函數(shù)名稱(chēng)、參數(shù)和返回值類(lèi)型等。
C語(yǔ)言中的函數(shù)可以分為庫(kù)函數(shù)和用戶(hù)自定義函數(shù)兩種。庫(kù)函數(shù)是由編譯器提供的函數(shù)庫(kù),包含了
眾多常用的函數(shù),例如數(shù)學(xué)庫(kù)函數(shù)、字符串處理函數(shù)等。用戶(hù)自定義函數(shù)是由程序員自行編寫(xiě)的函數(shù),根據(jù)實(shí)際需求定義相應(yīng)的參數(shù)和返回值類(lèi)型。
C語(yǔ)言的函數(shù)定義一般遵循以下格式:
返回值類(lèi)型 函數(shù)名稱(chēng)(參數(shù)列表) { 函數(shù)體 return 返回值; }
其中,返回值類(lèi)型指定函數(shù)返回值的數(shù)據(jù)類(lèi)型,函數(shù)名稱(chēng)是函數(shù)的標(biāo)識(shí)符,參數(shù)列表包含了函數(shù)的參數(shù)類(lèi)型和名稱(chēng),函數(shù)體是具體的實(shí)現(xiàn)代碼,return語(yǔ)句用于返回函數(shù)的結(jié)果。
C語(yǔ)言中的函數(shù)調(diào)用需要使用函數(shù)名稱(chēng)和實(shí)際參數(shù)來(lái)調(diào)用函數(shù),例如:
int add(int a, int b);
int main() { int result = add(2, 3); printf("%d", result); return 0; }
在上面的例子中,add函數(shù)是一個(gè)用戶(hù)自定義函數(shù),用于實(shí)現(xiàn)兩個(gè)整數(shù)相加的功能。在main函數(shù)中調(diào)用了add函數(shù),并將結(jié)果賦值給result變量,最終輸出結(jié)果為5。
五、C語(yǔ)言的控制語(yǔ)句C語(yǔ)言的控制語(yǔ)句用于實(shí)現(xiàn)程序的流程控制和邏輯判斷,主要包括選擇語(yǔ)句和循環(huán)語(yǔ)句兩種。
1.選擇語(yǔ)句
C語(yǔ)言中的選擇語(yǔ)句包括if語(yǔ)句和switch語(yǔ)句兩種。if語(yǔ)句用于根據(jù)條件選擇不同的執(zhí)行路徑,語(yǔ)法格式如下:
if (condition) {
statement;
}
其中,condition為條件表達(dá)式,如果條件成立則執(zhí)行statement中的語(yǔ)句。switch語(yǔ)句用于根據(jù)變量值選擇不同的執(zhí)行路徑,語(yǔ)法格式如下:
switch (expression) {
case constant1: statement1; break;
case constant2: statement2; break;
default: statement3; break;
}
其中,expression為變量或表達(dá)式,根據(jù)其值選擇執(zhí)行不同的case語(yǔ)句。如果沒(méi)有匹配的case語(yǔ)句,則執(zhí)行default語(yǔ)句。
2.循環(huán)語(yǔ)句
C語(yǔ)言中的循環(huán)語(yǔ)句包括for語(yǔ)句、while語(yǔ)句和do-while語(yǔ)句三種。for語(yǔ)句用于重復(fù)執(zhí)行一段代碼,語(yǔ)法格式如下:
for (initialization; condition; update) {
statement;
}
其中,initialization為初始化語(yǔ)句,condition為循環(huán)條件,update為更新語(yǔ)句,statement為執(zhí)行的語(yǔ)句。while語(yǔ)句和do-while語(yǔ)句也用于重復(fù)執(zhí)行一段代碼,其語(yǔ)法格式分別如下:
/*實(shí)例1 while循環(huán)*/
while (condition) {
statement;
}
/*實(shí)例2 do-while循環(huán)*/
do {
statement;
} while (condition);
其中,while語(yǔ)句在循環(huán)之前先進(jìn)行條件判斷,而do-while語(yǔ)句先執(zhí)行一次循環(huán)體再進(jìn)行條件判斷。
六、C語(yǔ)言的文件操作C語(yǔ)言中的文件操作用于對(duì)磁盤(pán)文件進(jìn)行讀寫(xiě)操作,主要包括打開(kāi)文件、關(guān)閉文件、讀寫(xiě)文件等操作。文件操作需要使用標(biāo)準(zhǔn)庫(kù)中的文件操作函數(shù),例如fopen、fclose、fread、fwrite等函數(shù)。打開(kāi)文件的函數(shù)fopen的語(yǔ)法格式為:
FILE *fopen(const char *filename, const char *mode);
其中,filename為文件名,mode為打開(kāi)文件的模式,可以是"r"、"w"、"a"等模式。打開(kāi)文件成功后,fopen函數(shù)將返回一個(gè)文件指針,該指針可以用于后續(xù)文件操作。
關(guān)閉文件的函數(shù)fclose的語(yǔ)法格式為:
int fclose(FILE *stream);
其中,stream為文件指針,fclose函數(shù)用于關(guān)閉指定的文件。
讀寫(xiě)文件的函數(shù)包括fread、fwrite、fscanf、fprintf等函數(shù)。這些函數(shù)的具體使用方法可以參考相應(yīng)的函數(shù)說(shuō)明。
七、C語(yǔ)言的預(yù)處理器C語(yǔ)言的預(yù)處理器用于在編譯之前對(duì)源代碼進(jìn)行處理,主要包括宏定義、文件包含、條件編譯等功能。
宏定義是預(yù)處理器中最常用的功能之一,可以使用#define關(guān)鍵字定義一個(gè)宏,例如:
#define PI 3.1415926
該宏定義將會(huì)在編譯之前被預(yù)處理器替換為3.1415926。
文件包含可以使用#include關(guān)鍵字將其他文件包含到當(dāng)前源文件中,例如:
#include "header.h"
條件編譯可以使用#if、#ifdef、#ifndef、elif等關(guān)鍵字實(shí)現(xiàn),例如:
#ifdef DEBUG
printf("Debug mode.\n");
#endif
該代碼段只有在DEBUG宏定義時(shí)才會(huì)被編譯。
八、C語(yǔ)言的指針C語(yǔ)言的指針是一種非常重要的概念,可以用于動(dòng)態(tài)內(nèi)存分配、函數(shù)傳參、數(shù)組訪問(wèn)等場(chǎng)景。
指針實(shí)際上就是一個(gè)變量,存儲(chǔ)著一個(gè)內(nèi)存地址。可以使用&運(yùn)算符獲取變量的地址,例如:
int a = 10; int *p = &a;
該代碼段中,p是一個(gè)指向a變量的指針。
指針的訪問(wèn)可以使用*運(yùn)算符實(shí)現(xiàn),例如:
int b = *p;
該代碼段中,b的值等于a的值。
動(dòng)態(tài)內(nèi)存分配可以使用malloc函數(shù)實(shí)現(xiàn),例如:
int *p = (int *)malloc(sizeof(int) * 10);
該代碼段中,malloc函數(shù)分配了一塊大小為10個(gè)int類(lèi)型的內(nèi)存空間,并返回一個(gè)指向該空間的指針。
函數(shù)傳參可以使用指針作為參數(shù),例如:
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
該代碼段中,swap函數(shù)使用指針作為參數(shù),可以交換兩個(gè)變量的值。
數(shù)組訪問(wèn)也可以使用指針實(shí)現(xiàn),例如:
int a[10] = {1, 2, 3, 4, 5};
int *p = a;
printf("%d", *p);
該代碼段中,p指向a數(shù)組的第一個(gè)元素,*p等于a[0]的值。
九、總結(jié)C語(yǔ)言是一門(mén)廣泛應(yīng)用于系統(tǒng)編程、嵌入式開(kāi)發(fā)、科學(xué)計(jì)算等領(lǐng)域的編程語(yǔ)言,具有高效、靈活、可移植等特點(diǎn)。C語(yǔ)言的基礎(chǔ)概念包括變量、數(shù)據(jù)類(lèi)型、運(yùn)算符、流程控制、函數(shù)、文件操作、預(yù)處理器、指針等,熟練掌握這些概念對(duì)于學(xué)好C語(yǔ)言非常重要。
在學(xué)習(xí)C語(yǔ)言時(shí),可以通過(guò)閱讀相關(guān)書(shū)籍、視頻教程、實(shí)踐編程等方式提高自己的編程水平。同時(shí)也要注意規(guī)范編程風(fēng)格,避免出現(xiàn)一些常見(jiàn)的錯(cuò)誤,例如數(shù)組越界、內(nèi)存泄漏、空指針訪問(wèn)等。
總的來(lái)說(shuō),C語(yǔ)言是一門(mén)非常重要的編程語(yǔ)言,在計(jì)算機(jī)科學(xué)領(lǐng)域發(fā)揮著巨大的作用。掌握好C語(yǔ)言的基礎(chǔ)概念,可以為以后的學(xué)習(xí)和工作奠定良好的基礎(chǔ)。


返回頂部
刷新頁(yè)面
下到頁(yè)底