? ? ?談及C語(yǔ)言,我想凡是學(xué)過(guò)它的朋友都有這樣一種感覺(jué),那就是“讓我歡喜讓我憂?!睔g喜的是,C語(yǔ)言功能非常強(qiáng)大、應(yīng)用廣泛,一旦掌握了后,你就可以理直氣壯地對(duì)他人說(shuō)“我是電腦高手!”,而且以后若是再自學(xué)其他語(yǔ)言就顯得輕而易舉了。憂慮的是,C語(yǔ)言猶如“少林武功”一般博大精深,太難學(xué)了。其實(shí)就筆者認(rèn)為C語(yǔ)言并非是“difficult(困難)”的,只要你能理清思路,掌握它的精髓,那么自學(xué)C語(yǔ)言是一件非常容易且又其樂(lè)無(wú)窮的事。今天本人就與大家一起談?wù)勅绾螌W(xué)習(xí)C語(yǔ)言或者說(shuō)學(xué)習(xí)C語(yǔ)言應(yīng)從哪幾方面著手。
想要學(xué)習(xí)的可以加下我自己建的C/C++學(xué)習(xí)交流群567625668,歡迎喜歡C/C++的各位大神小神前來(lái)學(xué)習(xí)交流,每天晚上群里面也會(huì)有大佬直播企業(yè)項(xiàng)目開(kāi)發(fā)學(xué)習(xí),更有各種項(xiàng)目案例供你自己學(xué)習(xí)哦
少俠留步.
了解一些基本知識(shí)
一.C語(yǔ)言的背景
就個(gè)人感觸,無(wú)論學(xué)習(xí)哪門(mén)語(yǔ)言首先應(yīng)該了解一下自己所學(xué)語(yǔ)言的背景,也可以說(shuō)它的發(fā)展史。
C語(yǔ)言屬于高級(jí)程序語(yǔ)言的一種,它的前身是“ALGOL”。其創(chuàng)始人是布朗·W·卡尼漢和丹尼斯·M·利奇。C語(yǔ)言問(wèn)世時(shí)是帶有很大的局限性,因?yàn)樗荒苡糜赨NIX系統(tǒng)上。然而隨著科學(xué)技術(shù)的進(jìn)步,計(jì)算機(jī)工業(yè)的發(fā)展,C語(yǔ)言逐漸脫離UNIX。1987年美國(guó)標(biāo)準(zhǔn)化協(xié)會(huì)制定了C語(yǔ)言的國(guó)際標(biāo)準(zhǔn),簡(jiǎn)稱“ANSI C”,從此以后它便成為一種廣泛使用的程序語(yǔ)言。C語(yǔ)言的優(yōu)點(diǎn)很多,主要的有如下四點(diǎn):
1.兼?zhèn)涓呒?jí)語(yǔ)言與低級(jí)語(yǔ)言的優(yōu)點(diǎn),屬于一種中間語(yǔ)言。
2.它是一種結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,非常適合結(jié)構(gòu)化程序設(shè)計(jì)。
3.有較豐富的數(shù)據(jù)類(lèi)型、運(yùn)算符以及函數(shù)供以選用。
4.直接與內(nèi)存打交道,使修改、編輯其他程序與文檔變得輕松,簡(jiǎn)單。
C 語(yǔ)言是整個(gè)計(jì)算機(jī)體系的基礎(chǔ),往下可以操作硬件(不止X86計(jì)算機(jī),還有ARM,DSP,單片機(jī)等各種微處理器)寫(xiě)Firmware,寫(xiě)驅(qū)動(dòng)、寫(xiě)OS,寫(xiě)編譯器,往上可以寫(xiě) App,并且大部分的計(jì)算機(jī)書(shū)籍里的算法都是C語(yǔ)言描述的。
所以學(xué)會(huì)了 C 語(yǔ)言,就是掌握了軟件領(lǐng)域的必備技能,以后再學(xué)其他的比如C++,Java,各種解釋性語(yǔ)言、就是小 Case 了。
下圖是一個(gè)網(wǎng)上流行的程序員“鄙視鏈”。其實(shí)我想說(shuō)的是,還是有一定道理的,哈哈哈,笑而不語(yǔ)。
我初學(xué) C 語(yǔ)言是在 2005年大二,那個(gè)時(shí)候,上課的模式是老師在上面講,我們?cè)谙旅媛?tīng),然后就沒(méi)有然后了,因?yàn)闆](méi)有電腦練習(xí),我根本就沒(méi)有機(jī)會(huì)在課下了解更多的東西。學(xué)完了一本書(shū),C 語(yǔ)言是干嘛的我都不知道,那個(gè)時(shí)候我并不知道 C 語(yǔ)言是用來(lái)寫(xiě)軟件的,更何況別說(shuō)軟件了,電腦都沒(méi)怎么見(jiàn)過(guò)。
我們當(dāng)初用的教材名字叫 《VC++ 語(yǔ)言程序設(shè)計(jì)》,這導(dǎo)致我很長(zhǎng)一段時(shí)間都沒(méi)不知道VC++,和 C++, C 的區(qū)別,OMG??!
對(duì) C 語(yǔ)言的深入學(xué)習(xí)是在研究生期間,我認(rèn)真地從頭到尾翻了一遍H.M.Deitel 的那本 C++,有了電腦簡(jiǎn)直如虎添翼,我有陣子天天在宿舍編程。對(duì)了,我是在學(xué)習(xí)C++的時(shí)候,順帶學(xué)習(xí)(復(fù)習(xí))的 C 語(yǔ)言,反正 C++ 的書(shū)上總有會(huì) C 的。
這里是我總結(jié)的學(xué)習(xí) C 語(yǔ)言的幾個(gè)步驟,其他編程語(yǔ)言基本類(lèi)似,希望對(duì)大家有所幫助。
1. 看書(shū)
學(xué)習(xí)一門(mén)編程語(yǔ)言少不了先學(xué)習(xí)基本語(yǔ)法。
C語(yǔ)言的語(yǔ)法也就是變量,數(shù)組、指針、表達(dá)式、邏輯操作、函數(shù),宏定義等等。學(xué)習(xí)這些先買(mǎi)一本入門(mén)級(jí)書(shū)籍,其實(shí)大都差不多,最經(jīng)典的就是譚浩強(qiáng)的那本了,雖然在知乎上沒(méi)少被人黑,但是畢竟流行了這么多年,總歸是有可取之處的,其實(shí)作為入門(mén)書(shū),你不能指望從它里面得到你想知道的所有東西。
除了基本語(yǔ)法,C 語(yǔ)言另一部分是標(biāo)準(zhǔn)庫(kù)。
這一點(diǎn)很少被C語(yǔ)言入門(mén)書(shū)提及,但是你要想寫(xiě)出一個(gè)像樣的程序的話,標(biāo)準(zhǔn)庫(kù)必不可少。推薦這本世界級(jí)C語(yǔ)言專家編寫(xiě)的《C標(biāo)準(zhǔn)庫(kù)》。
2. 寫(xiě)代碼練習(xí)
要想學(xué)好一門(mén)編程語(yǔ)言,看書(shū)遠(yuǎn)遠(yuǎn)不夠,一定要把書(shū)里的代碼搬到電腦里。
相信大多數(shù)人都是使用的Widnows,那么就下載安裝一個(gè)Visual Studio吧,用哪個(gè)版本?最新的 VS2017 毋庸置疑。
喜歡 Linux 的朋友,就先下載 Glibc 庫(kù),然后安裝 gcc, gdb。
好了,有了開(kāi)發(fā)環(huán)境,接下來(lái)一切變得簡(jiǎn)單,并且好玩。
試著寫(xiě)一些簡(jiǎn)單的代碼,比如 Hello World,文件讀寫(xiě),數(shù)學(xué)操作,常用算法,等等。
這是我以前練手時(shí)寫(xiě)的
3. 總結(jié)心得體會(huì)
把你覺(jué)得很抽象、難以理解的東西放到 VS 里面進(jìn)行調(diào)試,會(huì)有很多發(fā)現(xiàn)。我以前電腦里就經(jīng)常會(huì)有一個(gè)名字叫 Test 的工程文件夾,哪里有疑惑了,就把代碼放進(jìn)去,一 Debug,全部的疑云就解開(kāi)了。
比如這樣,了解 Struct 內(nèi)存結(jié)構(gòu)
比如這樣,了解 Union 的內(nèi)存結(jié)構(gòu)
C/C++學(xué)習(xí)交流群231662552
比如這樣,了解 指針和數(shù)組
然后把這一切,記錄在一個(gè) Word 中,這樣知識(shí)就變成自己的了。
這是我從前總結(jié)的一個(gè)文檔
4. 寫(xiě)個(gè)小作品
基本知識(shí)掌握的差不多了,試著寫(xiě)個(gè)小程序。
看著人生第一個(gè)自己開(kāi)發(fā)的程序,會(huì)有很多的成就感,并且在寫(xiě)程序的過(guò)程中,你的編程能力會(huì)有質(zhì)的飛躍。
我曾經(jīng)寫(xiě)過(guò)一個(gè)控制臺(tái)的五子棋游戲,可惜年代久遠(yuǎn),現(xiàn)在已經(jīng)打不開(kāi)了。
另外需要說(shuō)明的是,想在 Windows 上寫(xiě)一個(gè)有界面的程序的話,還需要學(xué)習(xí)Windows API,不過(guò)這仿佛是 C 語(yǔ)言之外的東西了,單單學(xué)習(xí) C 語(yǔ)言,一個(gè)控制臺(tái)程序就夠了。
最后一句話作為總結(jié),想要使自己的編程能力突飛猛進(jìn),一定要不斷地勤加練習(xí)。