1.c語言的發(fā)展歷史
? ? ? ? ? ? --C語言的原型ALGOL 60語言(也稱為A語言)钞支,最早的塊結(jié)構(gòu)語言挪挤。
? ? ? ? ? ? --1963年,劍橋大學將ALGOL 60語言發(fā)展成為CPL語言皿伺,CPL最大的缺點就是太大了滋捶,以至于不能在很多應用程序中使用。
? ? ? ? ? ? --1967年疟丙,劍橋大學的Martin Richards 對CPL語言進行了簡化猾警,于是產(chǎn)生了BCPL語言,BCPL缺乏運行時的支持隆敢,而且運行很慢发皿。
? ? ? ? ? ? --1970年,美國貝爾實驗室的Ken thompson將BCPL進行了修改拂蝎,提煉CPL語言的精華并起名為B語言穴墅,并且他用B語言寫了第一個UNIX操作系統(tǒng),它的字符處理機制太爛了温自,而且浮點數(shù)運算被實現(xiàn)的并不理想玄货,處理指針時開銷太大。
? ? ? ? ? ? --1972年左右悼泌,美國貝爾實驗室的D.M.Ritchie在B語言基礎上最終設計出了一種新的語言松捉,取名為C語言。
? ? ? ? ? ? --1977年馆里,為了使UNIX操作系統(tǒng)推廣隘世,Dennis.M.Rithie發(fā)表了不依賴于具體機器系統(tǒng)的C語言編譯文本“可移植的C語言編譯程序”。
? ? ? ? ? ? --1978年鸠踪,美國電放電報公司(AT&T)貝爾實驗室正式發(fā)表了C語言丙者,同時由B.W.Kernighan和D.M.Ritche合著了著名的“The C Programming Language”一書,通常簡稱為“K&R”,也有人稱之為“K&R”標準营密,但是在“K&R”中并沒有定義一個完整的標準C語言械媒。
? ? ? ? ? ? --1983年,美國國家標準化協(xié)會(American National Standards Institute),在“K&R”基礎上制定了一個C語言標準,于1983年發(fā)表纷捞,通常稱之為ANSI C痢虹,又稱C89。
? ? ? ? ? ? --1990年主儡,國際標準化組織ISO(International Organization for Standards)接受了ANSI C為ISO C的標準(ISO9899-1990)奖唯,又稱C99。
2.C語言的特點
? ? ? ? ? ? 1》 語言缀辩,簡潔,緊湊踪央,使用方便靈活臀玄。C語言一共有32個關鍵字,9種控制語句畅蹂,程序書寫自由健无,壓縮了一切不必要的成份。
? ? 2》 運算符豐富液斜。
? ? ? ? ? ? 3》 數(shù)據(jù)類型豐富累贤,具有現(xiàn)代語言的各種數(shù)據(jù)結(jié)構(gòu)。
? ? 4》 具有結(jié)構(gòu)化的控制語句少漆。
? ? 5》 語法限制不太嚴格臼膏,程序設計自由度大。
? ? 6》 C語言允許直接訪問物理地址示损,能進行位(bit)操作渗磅,能實現(xiàn)匯編語言的大部分功能,可以直接對硬件操作检访。
? ? ? ? ? ? 7》 生成目標代碼質(zhì)量高始鱼,程序執(zhí)行效率高。C語言一般只比匯編程序生成的目標代碼效率低10%--%20脆贵。
? ? 8》 C語言編寫的程序可移植性好医清,基本不用太多的修改就能在各種平臺上運行。
3.C的應用現(xiàn)狀
? ? ? ? ? ? 操作系統(tǒng)內(nèi)核開發(fā)領域幾乎是唯一開發(fā)工具
? ? ? ? ? ? 絕大部分操作系統(tǒng)是由C加上少量匯編語言開發(fā)的
? ? ? ? ? ? Linux卖氨、Windows会烙、Vxworks、Unix
? ? ? ? ? ? 在嵌入式領域占有絕對優(yōu)勢
? ? ? ? ? ? 在網(wǎng)絡服務器類相當大優(yōu)勢
? ? ? ? ? ? ? ? Apache筒捺、Oracle
? ? ? ? ? ? GUI應用領域
? ? ? ? ? ? ? ? 大型商用程序采用C的較多
? ? ? ? ? ? ? ? Offices,SPSS,AutoCAD
? ? ? ? ? ? 大規(guī)模持搜、高性能計算、游戲開發(fā)以及一些傳統(tǒng)的客戶端軟件和構(gòu)件
4.C程序結(jié)構(gòu)特點
? ? ? ? ? ? 程序由一個或多個函數(shù)組成
? ? ? ? ? ? 必須有并且只能有一個主函數(shù)main()
? ? ? ? ? ? 程序執(zhí)行從main開始焙矛,在main中結(jié)束葫盼,其它函數(shù)通過嵌套調(diào)用得以執(zhí)行
? ? ? ? ? ? C程序由語句組成
? ? ? ? ? ? 用";"作為語句終止符
? ? ? ? ? ? 習慣用小寫字母,大小寫敏感
6.linux平臺下我們用的編譯工具 gcc? (GUN)編譯器的集合村斟;我們用的編輯工具 VIM 贫导。
? ? 注: 區(qū)別的編譯器和編輯器的功用抛猫。
? ? ? ? -E? ? -S? ? -c? ? (-o)
? ? .c --> .i --> .s --> .o --> a.out
? ? ? 預處理? 編譯? 匯編? ? 鏈接
7.常用的字節(jié)和位之間的單位系
? ? ? ? ? ? 內(nèi)存以字節(jié)為單元組成,每個字節(jié)有一個地址孩灯,一個字節(jié)一般由8個二進制位組成闺金,每個二進制的值是0或1
? ? ? ? ? ? 1T = 1024G
? ? ? ? ? ? 1G = 1024M
? ? ? ? ? ? 1M = 1024K? ? ?
? ? ? ? ? ? 1K = 1024B? ? ?
? ? ? ? ? ? 1B = 8b? ? ? ? Byte 字節(jié)? Bit 位
8.C語言的32個關鍵字
? ? 只有32個,很多功能由函數(shù)實現(xiàn).
? ? auto? break? case? char? const? continue? default? do double? else
? ? enum? extern? float? for? goto? if? int? long? register? return
? ? short? signed sizeof? static? struct? switch? typedef? unsigned? union? void
? ? volatile? while
9.數(shù)據(jù)類型? ? 注:(區(qū)分數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)的概念)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |--短整型short
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |整型----|--整型? int
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |--數(shù)值類型|? ? ? ? |--長整型long
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? |--擴展型長整型 long long
? ? |---------------基本類型--|? ? ? ? ? |? ? ? ?
? ? |? ? ? ? ? ? ? ? ? ? ? ? |? ? ? ? ? |實點型--|-單精度型float
? ? | ? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? |-雙精度型double
C? ? |? ? ? ? ? ? ? ? ? ? ? ? |--字符類型
數(shù)? |
據(jù) --|? ? ? ? ? ? ? ? ? ? ? ? |--數(shù)組
類? |---------------構(gòu)造類型--|--結(jié)構(gòu)體型
型? |? ? ? ? ? ? ? ? ? ? ? ? |--枚舉類型
? ? |? ? ? ? ? ? ? ? ? ? ? ? |--共用體型
? ? |?
? ? |---------------指針類型
? ? |
? ? |---------------空類型(無類型void)
? ? |? ? ? ? ? ? ? ?
? ? |---------------自定義類型typedef
10. 常量與變量
? ? 1》運行過程中,其值不能改變的量稱為常量峰档。12败匹,-3,4.6讥巡,-1.23掀亩,'a',“hello”。
? ? 2》在運行過程中可以改變其值的量叫變量欢顷。
? ? 3》和其它高級語言一樣槽棍,用來對變量,符號常量抬驴,函數(shù)炼七,數(shù)組等數(shù)據(jù)對象命名的有效字符序列稱為標志符。
? ? 注: 規(guī)定標識符只能由字母布持,數(shù)字和下劃線3種字符組成豌拙。且第一個字母必須為字母或下劃線。(有大小寫之分)
? ? Class? class 為不同的變量名题暖。
注:ANSI C沒有規(guī)定標識符的長度姆蘸,但各個C編譯系統(tǒng)都有自己的規(guī)定。如IBM——PC的MSC取8個字符芙委。大于8個字符的只取前8個字符作為有效標識符逞敷。
11.整型變量
? ? 1》 整型數(shù)據(jù)在內(nèi)存的存儲方式(補碼),正數(shù)和0的補碼和它的原碼相同灌侣,負數(shù)是原碼取反加1推捐;
? ? 2》 整數(shù)的十進制數(shù),八進制侧啼,二進制的相互轉(zhuǎn)換和表示方法牛柒;
? ? 10進制===>>2進制? (除二取余法)
? ? 2? ? ===>>10? ? 例10101? ? ==? 1*2^0+0*2^1+1*2^2+0*2^3+1*2^4
? 每一個十六進制對應4個bit
12.浮點型變量
float? f;
double? b;
13.字符變量與常量
man ascii
char ch? ? "ch為字符變量"
ch = 'a'? "a為字符常量"
14.字符串常量
? "hello world"
13.算術運算符和算術表達式
? (查表理解它們之間的優(yōu)先級別,盡可能的多記一點)
a+b; a b 操作數(shù)? ‘+’操作符
根據(jù)所需操作數(shù)的數(shù)量 將操作符分為:
1.單目運算符:++ --? & ! ~? *(解引用:訪問指針指向的空間)
2.雙目運算符:+ - * / %
3.三目運算符: ?:
14.輸出(printf)輸入(scanf)語句的用法和簡介
printf("hello %d\n",a);
scanf("%d",&a);
%? 格式控制符
a? 輸出/輸入?yún)?shù)
幾個%對應幾個輸出/輸入?yún)?shù)痊乾,也叫輸出列表
%d? ? 整數(shù)int
%h? ? short
%c? ? 字符char
%s? ? 字符串
%f? ? 浮點型float
%lf? ? double
%p? ? 地址
%x? ? 十六進制
%o? ? 一個八進制
%u? ? unsigned int
%hu? ? unsigned short
%ld? ? unsigned long
%lld? long long
%%? ? 輸出一個“%”
...........................
15.位運算
? ? ? 運算符? ? ? ? ? 含義
? ? ? ? &(清0)? ? ? ? 按位與? ? 0&0=0,? 0&1=0,? 1&0=0,? 1&1=1? ?
? ? |(置1)? ? ? ? 按位或? ? 0|0=0,? 1|0=1皮壁, 0|1=1, 1|1=1
? ? ^? ? ? ? ? ? 按位異或? 0^0=0,? 1^0=1,? 0^1=1,? 1^1=0? ?
? ? ~? ? ? ? ? ? 取反
? ? ? ? 在邏輯左右移移出去的直接丟棄,空出來的補0
? ? ? ? 算術右移移出去的直接丟棄 空出來的補符號位
? ? <<? ? ? ? ? ? 左移
? ? >>? ? ? ? ? ? 右移
16.布爾希值(bool)
? 非零為真哪审,零為假蛾魄。