c語言基礎(chǔ)知識總結(jié)
C語言的設(shè)計(jì)目標(biāo)是提供一種能以簡易的方式編譯、處理低級存儲器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語言。以下是由學(xué)習(xí)啦小編整理關(guān)于c基礎(chǔ)知識總結(jié)的內(nèi)容,希望大家喜歡!
c語言基礎(chǔ)知識總結(jié)
1.C語言中,變量必須先聲明后使用,即一個(gè)程序塊(花括號對)中所有臨時(shí)變量必須在第一條可執(zhí)行語句之前全部聲明,而不能像C++那樣隨用隨聲明;
2.C語言中參數(shù)傳值傳遞形參,即為參數(shù)的拷貝,此與C++/JAVA相同,同時(shí)值得注意,ANSI C不支持引用,此與C++/JAVA有區(qū)別,那么要對參數(shù)進(jìn)行修改只能使用指針方式(指針傳值指針本身仍是形參,要修改指針本身那必須使用雙重指針);
3.C語言默認(rèn)類型為int,即參數(shù)無類型或函數(shù)無返回值類型聲明,則認(rèn)為是int(貌似一些編譯器不支持),同時(shí)不建議使用該特性;
4.無參數(shù)的函數(shù)聲明應(yīng)當(dāng)使用void表明,否則C語言按照老式聲明方法忽略參數(shù)類型檢查;
5.全局變量建議全大寫,局部變量建議全小寫,內(nèi)部變量31個(gè)字符有效,外部變量不區(qū)分大小寫,僅6個(gè)字符有效,所以必須保持唯一性;
6.ANSI C是按照多字節(jié)實(shí)現(xiàn)的,UNICODE是后來發(fā)展的,所以有char/WCHAR,與.NET中char直接是雙字節(jié)有區(qū)別,在C#中導(dǎo)入dll時(shí)值得注意;
7.C語言支持枚舉,并且枚舉和int直接強(qiáng)制類型轉(zhuǎn)換即可,比.NET方便;
8.#define聲明宏定義直接在編譯時(shí)替換,不進(jìn)行類型檢查,const聲明常量則可以進(jìn)行類型檢查;
9.運(yùn)算符的優(yōu)先級記憶比較麻煩,還是()可靠;
10.goto并不是一無是處,在不考慮程序可讀性的情況下可能獲得更高的效率;
11.函數(shù)實(shí)際也可以與特殊的類型相對應(yīng),那樣對于理解函數(shù)指針比較方便,函數(shù)為外部類型;
12.static用于全局變量和函數(shù)則限定該變量和函數(shù)的使用范圍僅為該源文件(從而無需考慮與其他源文件不得重名),用于函數(shù)內(nèi)部變量則該變量的內(nèi)存分配和回收不再同于普通臨時(shí)變量(調(diào)用函數(shù)生成,函數(shù)返回銷毀),而是一直存在于靜態(tài)變量區(qū),從而可以保存一些狀態(tài);
13.頭文件的作用體現(xiàn)在調(diào)用其他源文件時(shí)不需要再次寫函數(shù)定義,所以實(shí)現(xiàn)函數(shù)是不需要頭文件的,調(diào)用時(shí)才需要,可以采用富頭文件定義一大組接口,然后使用多個(gè)源文件分別實(shí)現(xiàn);
14.寄存器變量使用register聲明,僅適用于使用頻率高的局部變量(含形參)(受限于底層硬件,不一定會被分配到寄存器,但是這么寫不影響效率);
15.全局變量和靜態(tài)變量默認(rèn)初始化為全零且僅初始化一次,局部變量默認(rèn)初始化為未定義且每次都會重新初始化;
16.遞歸調(diào)用的方法一般比較緊湊,但是每次調(diào)用會單獨(dú)維護(hù)調(diào)用的堆棧,所以效率不是最高;
17.#include的作用體現(xiàn)于將一些內(nèi)容避免重新寫一遍(主要是類型、函數(shù)和外部變量定義),所以實(shí)際上不一定為h文件;
18.\表示一行尚未結(jié)束,對于定義長的字符串和define比較有用;
19.函數(shù)調(diào)用的執(zhí)行順序不確定,所以對于a()+b()這樣函數(shù)中使用相同變量并且改變其值的需要借助臨時(shí)變量處理,防止不同實(shí)現(xiàn)的調(diào)用順序不一致;
20.##用于宏定義中連接前后兩個(gè)部分,如cat(a, b) a ## b;
21.指針是C/C++的重要內(nèi)容,當(dāng)然也是雙面刃,用好了很方便而且高效,用不好那就造成程序不穩(wěn)定;
22.使用va_list, va_start, va_arg, va_end來定義可變參數(shù)的函數(shù),具體可以參見http://blog.csdn.net/flyoxs/article/details/4099317,我的理解是通過va_start函數(shù)中的第一個(gè)不變參數(shù)將va_list指向參數(shù)列表(函數(shù)調(diào)用的棧中),然后通過va_arg獲取每個(gè)參數(shù)并將va_list移動指定類型的長度,最后則通過va_end完成必要的回收工作,需要指出的是va_arg沒有結(jié)束邊界,所以比較有效的方式有兩種,一種對于參數(shù)類型一致,則可以第一個(gè)參數(shù)指出后續(xù)參數(shù)的總數(shù),然后依次獲取,另一種對于不同類型的參數(shù)混用,則可以通過類型標(biāo)識+參數(shù)配對的方式進(jìn)行使用(第一個(gè)參數(shù)依然可以指定數(shù)量,當(dāng)然也可以檢查標(biāo)識),從而避免最后讀取無效的參數(shù),對于可變參數(shù)僅支持int和double兩種類型(參數(shù)未限定類型,故按照舊式聲明理解)以及指針類型;
23.函數(shù)指針是用來在C語言中實(shí)現(xiàn)動態(tài)調(diào)用的比較有效的方式
24.結(jié)構(gòu)體用作參數(shù)依然是拷貝為形參傳遞,這點(diǎn)與JAVA中全部對象都是類有區(qū)別(類的對象通過引用傳值,C#支持struct),所以對于大的結(jié)構(gòu)體事宜使用指針傳遞,而對于小的結(jié)構(gòu)體拷貝傳值效率并不低;
25.代碼中字符數(shù)組為靜態(tài)常量,對其操作無效,程序塊中數(shù)組的聲明是可以自動回收的,通過malloc/calloc分配的內(nèi)存為堆內(nèi)存,需要自行通過free回收;
c語言進(jìn)制知識總結(jié)
1.什么是進(jìn)制
進(jìn)制是一種計(jì)數(shù)的方式,常用的有二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制。任何數(shù)據(jù)在計(jì)算機(jī)內(nèi)存中都是以二進(jìn)制的形式存放的。
我對進(jìn)制的個(gè)人理解,二進(jìn)制數(shù)是以2為計(jì)算單元,滿2進(jìn)1位的數(shù);八進(jìn)制數(shù)是以8為計(jì)算單元,滿8進(jìn)1位的數(shù)。
對于任何一個(gè)數(shù)字,我們都可以用不同的進(jìn)制來表示,比如,十進(jìn)制數(shù)12,用二進(jìn)制表示為1100,用八進(jìn)制表示為14,用十六進(jìn)制表示為0xC。
2.進(jìn)制的轉(zhuǎn)換規(guī)則
遵循滿進(jìn)制值進(jìn)1位,個(gè)位數(shù)變?yōu)?的原理,下面我們以十進(jìn)制數(shù)18為例,對1-18中每一個(gè)數(shù)值轉(zhuǎn)換各種進(jìn)制做一個(gè)詳細(xì)說明
轉(zhuǎn)二進(jìn)制:
1小于2,無需進(jìn)1位,1的二進(jìn)制值是1
2為二進(jìn)制值1后面一個(gè)數(shù),由于1+1滿2,需要進(jìn)1位,個(gè)位數(shù)變?yōu)?,所以2的二進(jìn)制值是10
3為二進(jìn)制值10后面一個(gè)數(shù),由于11的個(gè)位數(shù)1小于2,無需進(jìn)1位,所以3的二進(jìn)制值是11
4為二進(jìn)制值11后面一個(gè)數(shù),由于11的個(gè)位數(shù)1+1滿2,需要進(jìn)1位,而二進(jìn)制值11的位數(shù)1+1又滿2,所以位數(shù)加1,最終轉(zhuǎn)換結(jié)果為100
轉(zhuǎn)換思路:二進(jìn)制值11+1 ->10+(1+1)(個(gè)位等于2,進(jìn)1位,個(gè)位數(shù)變?yōu)?) ->(1+1)+0(位數(shù)滿2,進(jìn)1位) -> 100
以此類推,最終十進(jìn)制數(shù)18的二進(jìn)制轉(zhuǎn)換結(jié)果是10010
轉(zhuǎn)八進(jìn)制:
1-7小于8,無需進(jìn)1位,1-7的八進(jìn)制由1-7表示
8為八進(jìn)制值7后面一個(gè)數(shù),由于7+1滿8,需要進(jìn)1位,個(gè)位數(shù)變?yōu)?,所以8的八進(jìn)制值是10
以此類推,最終十進(jìn)制數(shù)18的八進(jìn)制轉(zhuǎn)換結(jié)果是22
轉(zhuǎn)十六進(jìn)制
十六進(jìn)制中,個(gè)位數(shù)1-15分別為1 2 3 4 5 6 7 8 9 a b c d e f (a=10....f=15)
16為十六進(jìn)制值c后面1個(gè)數(shù),由于c+1滿16,需要進(jìn)1位,個(gè)位數(shù)變?yōu)?,所以16的十六進(jìn)制是10。
最終十進(jìn)制數(shù)18的十六進(jìn)制轉(zhuǎn)換結(jié)果是12
看過“c語言基礎(chǔ)知識總結(jié)“的人還看了: