C語(yǔ)言知識(shí)點(diǎn)梳理

C語(yǔ)言語(yǔ)法總結(jié)

寫(xiě)在開(kāi)篇:本篇文章適合C語(yǔ)言初學(xué)者和想梳理和回顧一下C語(yǔ)言整體語(yǔ)法的看官继蜡,由于考慮不要對(duì)初學(xué)者灌以較深的知識(shí)點(diǎn)而讓其失去學(xué)習(xí)的興趣栗菜,本篇文章知識(shí)點(diǎn)比較全面且不深保礼,請(qǐng)看官自己決定是否閱讀以免浪費(fèi)您寶貴的時(shí)間纹磺!

C語(yǔ)言作為一種底層面向過(guò)程語(yǔ)言蕉斜,在編程語(yǔ)言中有著舉足輕重的地位洒试,基本上“科班”出身的計(jì)算機(jī)系學(xué)生第一個(gè)接觸的編程語(yǔ)言都是C語(yǔ)言,因?yàn)楣P者上大一的時(shí)候(2004年)也是學(xué)習(xí)了C語(yǔ)言庶溶,但是長(zhǎng)時(shí)間沒(méi)有運(yùn)用了煮纵,所以對(duì)C語(yǔ)言知識(shí)點(diǎn)做一個(gè)梳理懂鸵,也為后續(xù)開(kāi)發(fā)FFmpeg音視頻做一個(gè)堅(jiān)實(shí)的基礎(chǔ)。好的廢話不多說(shuō)行疏,先來(lái)個(gè)HelloWorld鎮(zhèn)樓:
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("Hello World!\n");
return 0;
}

常用基本類型:

整型:short, int, long
    short:16位匆光,占2個(gè)字節(jié)
    int:32位,占4個(gè)字節(jié)
    long:32位酿联,占4個(gè)字節(jié)

浮點(diǎn)型:float, double
float:32位终息,精度低
double:32位,精度高
注:浮點(diǎn)型適合做科學(xué)運(yùn)算贞让,但是計(jì)算速度相對(duì)慢周崭,如果不是做科學(xué)計(jì)算,那么最好使用整型數(shù)據(jù)震桶。

char型:8位休傍,1個(gè)字節(jié)征绎。只代表一個(gè)字符蹲姐。

void型:一般使用指針的時(shí)候使用。

變量與常量:

int a = 0;              //變量人柿,可以進(jìn)行賦值柴墩,其中的值可以更改的
const int len = 256;    //常量,定義之后凫岖,值不可以再改變 const是關(guān)鍵字江咳,需要寫(xiě)在前面

算術(shù)運(yùn)算和比較運(yùn)算:

算術(shù)運(yùn)算:
    +, -, *, /, %:加/ 減/ 乘/ 除/ 余
比較運(yùn)算:
    >, ==, <, >=, <=, !=: 大于/ 等于/ 小于/ 大于等于/ 小于等于/ 不等

流程控制語(yǔ)句:

條件控制語(yǔ)句if else:
    if(a>b){
        執(zhí)行語(yǔ)句……;
    } else {
        執(zhí)行語(yǔ)句……;
    }
循環(huán)控制語(yǔ)句while, do while, for:
    while(條件){
        執(zhí)行循環(huán)的語(yǔ)句……
    }

    do{
        執(zhí)行循環(huán)的語(yǔ)句……
    }while(條件)

    for(int i = 0; i < 10; i++){
        執(zhí)行循環(huán)的語(yǔ)句……
    }

函數(shù):

函數(shù)用來(lái)實(shí)現(xiàn)函數(shù)體中的功能,本著高內(nèi)聚哥放,低耦合的思想歼指,在函數(shù)內(nèi)部只針對(duì)函數(shù)要實(shí)現(xiàn)的功能做開(kāi)發(fā),而與其他的函數(shù)最好是沒(méi)有關(guān)聯(lián)甥雕。
void func(int i){
    函數(shù)體
}
函數(shù)由返回值踩身,函數(shù)名,參數(shù)社露,函數(shù)體組成挟阻。

文件操作:

C語(yǔ)言中對(duì)文件的操作是先定義一個(gè)FILE變量,然后對(duì)這個(gè)file變量進(jìn)行操作
簡(jiǎn)單實(shí)例:
    #include<stdio.h>
    int main(int argc, char* argv[]){
        FILE* file;
        char buf[1024] = {0,};
        file = fopen("1.txt", "a+");
        fwrite("hello, world!", 1, 13, file);
        rewind(file);
        fread(buf, 1, 20, file);
        fclose(file);
        printf("buf = %s\n", buf);
        return 0;
    }
a+:表示addition峭弟,如果1.txt存在則在1.txt文本內(nèi)容的后面追加內(nèi)容附鸽,如果不存在1.txt,則創(chuàng)建1.txt瞒瘸。
fwrite中的參數(shù):第一個(gè)參數(shù)是你要寫(xiě)入的內(nèi)容坷备,第二個(gè)參數(shù)是第一個(gè)參數(shù)中每個(gè)字符占幾個(gè)字節(jié),第三個(gè)參數(shù)是第一個(gè)參數(shù)一共多少個(gè)字節(jié)情臭,第四個(gè)參數(shù)是要寫(xiě)入那個(gè)文件中击你。
fread中的參數(shù):第一個(gè)參數(shù)要將數(shù)據(jù)內(nèi)容讀到哪里玉组,第二個(gè)參數(shù)是將這個(gè)內(nèi)容按幾個(gè)字節(jié)一份進(jìn)行讀取(例子中是一個(gè)字節(jié)一個(gè)字節(jié)的讀)丁侄,第三個(gè)參數(shù)是一共讀取多少個(gè)字節(jié)惯雳,第四個(gè)參數(shù)是從哪里讀取。
rewind:這個(gè)是讓光標(biāo)回到file的文本內(nèi)容的首位(和數(shù)據(jù)庫(kù)游標(biāo)概念類似)鸿摇,否則光標(biāo)停留在最后(因?yàn)榍懊鎓open的時(shí)候輸入的參數(shù)是"a+"石景,意思是在最后追加)。
fclose:在使用完文件之后需要關(guān)閉這個(gè)文件拙吉。

指針:

指針是C語(yǔ)言的靈魂潮孽,沒(méi)有學(xué)過(guò)指針相當(dāng)于沒(méi)學(xué)過(guò)C語(yǔ)言。
指針存放的是指向某個(gè)值的地址筷黔,關(guān)鍵字是*
int *a 這里a存放的是指向*a值的地址往史,&a存放的是指向a的地址

這里稍微提及一下操作系統(tǒng)是如何管理內(nèi)存的。下面三個(gè)概念需要了解一下:椃鸩眨空間椎例,堆空間和內(nèi)存映射:
    
    棧空間:我們每記錄一個(gè)函數(shù)的時(shí)候请祖,操作系統(tǒng)會(huì)給我們分配一段椂┩幔空間;而當(dāng)函數(shù)退出的時(shí)候肆捕,操作系統(tǒng)又會(huì)回收這段椝⒔空間。這就是為什么局部變量有作用域的原因慎陵。一般椦凼空間的大小是4M-8M。 
    堆空間:操作系統(tǒng)為每個(gè)進(jìn)程一般賦予4G左右的空間席纽,操作系統(tǒng)會(huì)占1G捏悬,剩下3G都是堆空間的。堆空間一般存放全局變量和靜態(tài)變量胆筒。
    內(nèi)存映射:磁盤(pán)中的文件映射到內(nèi)存中邮破,只要對(duì)內(nèi)存中的更改,磁盤(pán)也會(huì)更改仆救,這樣會(huì)大大提升速度抒和,一般運(yùn)用在數(shù)據(jù)庫(kù)操作。

指針如何分配和釋放內(nèi)存彤蔽?

    分配空間:
    void* mem = malloc(size);
    釋放內(nèi)存:
    free(mem);

    使用malloc關(guān)鍵字摧莽,接后面參數(shù)的大小,就分配了堆空間的內(nèi)存顿痪。在分配內(nèi)存并使用之后一镊辕!定油够!要!釋征懈!放石咬!掉!之前分配掉的內(nèi)存卖哎,要不然會(huì)出現(xiàn)內(nèi)存泄漏的情況鬼悠,內(nèi)存泄漏多了就會(huì)產(chǎn)生內(nèi)存溢出的現(xiàn)象。當(dāng)然還有一種情況是野指針亏娜,野指針是指占用了別人的內(nèi)存焕窝,當(dāng)你已經(jīng)釋放了內(nèi)存之后,別人申請(qǐng)了這塊內(nèi)存维贺,你就不能繼續(xù)再用這塊內(nèi)存了它掂。

函數(shù)指針:

    返回值類型(*指針變量名)([形參列表]);

    int func(int a, int b);         /* 聲明一個(gè)函數(shù) */
    int (*f)(int a, int b);         /* 聲明一個(gè)函數(shù)指針 */
    f = func;                       /* 將函數(shù)func的首地址賦值給指針f */

    函數(shù)指針的優(yōu)點(diǎn)在于:一個(gè)函數(shù)指針可以指向不同的函數(shù),也就是不改變函數(shù)名字的前提下溯泣,可以讓函數(shù)有不同的行為(類似于java的多態(tài))虐秋。

結(jié)構(gòu)體:

結(jié)構(gòu)體有點(diǎn)類似于OOP中的class,但是不同的是其中只能定義變量不能定義方法发乔。
關(guān)鍵字struct熟妓,相當(dāng)于自定義類型雪猪。
struct st{
    int a;
    int b;
};
使用的時(shí)候需要寫(xiě)全 struct st sst栏尚, 然后使用“.”來(lái)調(diào)用定義的成員變量 sst.a = 10, sst.b = 20

枚舉類型:

枚舉的意義在于限制了枚舉類型的對(duì)象只能在一個(gè)限定范圍中去選擇。
enum e_type{
    red = 0,
    green,
    blue
};
使用的時(shí)候需要寫(xiě)全 enum e_type et, 然后使用“.”來(lái)調(diào)用定義的成員變量 et.red
需要注意的是枚舉中的變量是自增1的只恨,green就是2译仗,blue就是3。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末官觅,一起剝皮案震驚了整個(gè)濱河市纵菌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌休涤,老刑警劉巖咱圆,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異功氨,居然都是意外死亡序苏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)捷凄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)忱详,“玉大人,你說(shuō)我怎么就攤上這事跺涤⌒僬觯” “怎么了监透?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)航唆。 經(jīng)常有香客問(wèn)我胀蛮,道長(zhǎng),這世上最難降的妖魔是什么糯钙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任醇滥,我火速辦了婚禮,結(jié)果婚禮上超营,老公的妹妹穿的比我還像新娘鸳玩。我一直安慰自己,他們只是感情好演闭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布不跟。 她就那樣靜靜地躺著,像睡著了一般米碰。 火紅的嫁衣襯著肌膚如雪窝革。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天吕座,我揣著相機(jī)與錄音虐译,去河邊找鬼。 笑死吴趴,一個(gè)胖子當(dāng)著我的面吹牛漆诽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锣枝,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼厢拭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了撇叁?” 一聲冷哼從身側(cè)響起供鸠,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陨闹,沒(méi)想到半個(gè)月后楞捂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趋厉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年寨闹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片觅廓。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鼻忠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帖蔓,我是刑警寧澤矮瘟,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站塑娇,受9級(jí)特大地震影響澈侠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜埋酬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一哨啃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧写妥,春花似錦拳球、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至扎筒,卻和暖如春莱找,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嗜桌。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工奥溺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人骨宠。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓浮定,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親诱篷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子壶唤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容