YYDS!阮一峰老師的又一開(kāi)源神作
給大家報(bào)告下,阮一峰老師的《C語(yǔ)言入門教程》于 2021 年 9 月 7 日上線了!
對(duì),和往常一樣,這個(gè)教程是開(kāi)源的,采用知識(shí)共享許可證,源碼托管在 GitHub,大家可以自由使用。
https://github.com/wangdoc/clang-tutorial
在線閱讀地址也有:
https://wangdoc.com/clang/
我第一時(shí)間就拜讀了一遍,受益匪淺!可以說(shuō)目前我見(jiàn)到的最好的 C語(yǔ)言入門教程了,沒(méi)有之一!
要知道,國(guó)內(nèi)的絕大多數(shù)高校,大一都會(huì)安排 C 語(yǔ)言這門課,教材通常會(huì)選擇譚浩強(qiáng)的C語(yǔ)言程序設(shè)計(jì),但這本書(shū)在網(wǎng)上的風(fēng)評(píng)極差。
而阮一峰老師的作品,想必大家都有所耳聞,硬核的同時(shí),又通俗易懂,深受廣大讀者的喜歡。
福音啊!我要狂吹阮一峰了老師的這份《C語(yǔ)言入門教程》。
考慮到很多小伙伴喜歡 PDF 版的,我就立馬給準(zhǔn)備了!
關(guān)注的小伙伴可以點(diǎn)擊下方的名片直接跳轉(zhuǎn)過(guò)去發(fā)送關(guān)鍵字「08」拉取下載地址。
之前給大家推薦的學(xué)習(xí) C語(yǔ)言的視頻教程有浙大翁愷教授的《C語(yǔ)言程序設(shè)計(jì)》,在 B 站上和中國(guó)大學(xué)慕課網(wǎng)上都可以看得到。
那配上阮一峰老師的這個(gè)在線文檔教程,可以說(shuō)是完美!

我對(duì)這份教程是非常滿意的,該講的地方都講到了,示例也給了很多,對(duì)初學(xué)者來(lái)說(shuō),完全夠用了。
阮一峰老師在寫(xiě)這份《C語(yǔ)言入門教程》的時(shí)候還是花費(fèi)了很多心思的,因?yàn)?C 代碼的寫(xiě)法實(shí)在是太自由了,而平常工作中又確實(shí)很少有機(jī)會(huì)寫(xiě) C 代碼,所以前前后后花了 6 個(gè)多月的時(shí)間。
C語(yǔ)言最初是作為 Unix 系統(tǒng)的開(kāi)發(fā)工具而發(fā)明的。1972年,丹尼斯·里奇和布萊恩·柯林漢在 B 語(yǔ)言的基礎(chǔ)上重新設(shè)計(jì)了一門新語(yǔ)言,這種新語(yǔ)言取代了 B 語(yǔ)言,所以稱為 C 語(yǔ)言。
1973年,整個(gè) Unix 系統(tǒng)都使用了 C 語(yǔ)言重寫(xiě)。此后,C 語(yǔ)言開(kāi)始快速流傳,廣泛用于各種操作系統(tǒng)和系統(tǒng)軟件的開(kāi)發(fā)。
除了用于計(jì)算機(jī)操作系統(tǒng)的編寫(xiě),C語(yǔ)言現(xiàn)在主要用于嵌入式系統(tǒng)的開(kāi)發(fā),騎車、照相機(jī)、家用電器等設(shè)備的底層系統(tǒng)都是用 C 語(yǔ)言編程的。
C語(yǔ)言能夠直接操作硬件、管理內(nèi)存、跟操作系統(tǒng)交互,這使得它成為了一種非常接近底層的編程語(yǔ)言,非常適合有極高性能要求的程序。
C語(yǔ)言對(duì)程序員的限制很少,它假設(shè)程序員知道自己在干嘛,不會(huì)限制程序員做各種騷操作,想干嘛就干嘛,反正后果自負(fù),哈哈哈。
C語(yǔ)言的哲學(xué)就是“極度相信程序員,不妨礙他們做事”,所以,C語(yǔ)言讓程序員自己管理內(nèi)存,沒(méi)有垃圾回收功能,也不提供類型檢查、數(shù)組下標(biāo)范圍檢查、指針位置檢查等防御措施。
表面上看,這似乎很危險(xiǎn),但對(duì)于有一定水平的程序員來(lái)說(shuō),簡(jiǎn)直就是福音,大膽去編程,解放生產(chǎn)效率就對(duì)了。
另外一方面,C語(yǔ)言的 debug 不是很容易,寫(xiě)代碼的時(shí)候必須要富有縝密的邏輯性,一旦出錯(cuò),是很難找補(bǔ)的。
C語(yǔ)言在武林界的地位就相當(dāng)于少林的地位,天下武功皆出少林,很多流行的編程語(yǔ)言都是以 C語(yǔ)言為基礎(chǔ)的,比如說(shuō)C++、Java、C#、JavaScript 等等,有了 C語(yǔ)言的基礎(chǔ),再學(xué)習(xí)這些語(yǔ)言都會(huì)有很大幫助。
經(jīng)過(guò)多年的發(fā)展,C語(yǔ)言有蠻多版本的,1999 年 C99 是目前最流行的 C 版本。
常見(jiàn)的 C 語(yǔ)言編譯器是自由軟件基金會(huì)推出的 GCC 編譯器,它可以免費(fèi)使用。Linux 和 Mac 系統(tǒng)可以直接安裝 GCC,Windows 系統(tǒng)可以安裝 MinGW。
不過(guò)網(wǎng)上也有蠻多在線編譯器的,可以直接在網(wǎng)頁(yè)上模擬運(yùn)行 C 代碼,查看結(jié)果,非常方便。

CodingGround網(wǎng)址:https://www.tutorialspoint.com/compile_c_online.php
C 語(yǔ)言是一種編譯型語(yǔ)言,源碼是文本文件,本身是無(wú)法執(zhí)行的,需要通過(guò)編譯器,生成二進(jìn)制的可執(zhí)行文件。
編譯器將代碼從文本翻譯成二進(jìn)制指令的過(guò)程,被稱為編譯階段,又稱為“編譯時(shí)”(compile time),跟運(yùn)行階段(又稱為“運(yùn)行時(shí)”)相區(qū)分。
C語(yǔ)言中,指針是令初學(xué)者頭痛的一塊內(nèi)容,所以我這里簡(jiǎn)單給大家聊兩句。
指針是什么?它是一個(gè)值,這個(gè)值代表一個(gè)內(nèi)存地址,因此,指針就相當(dāng)于指向某個(gè)內(nèi)存地址的路標(biāo)。
字符*表示指針,通常跟在類型關(guān)鍵字的后面,表示指針指向的是什么類型的值。比如,char*表示一個(gè)指向字符的指針,float*表示一個(gè)指向float類型的值的指針。
*這個(gè)符號(hào)除了表示指針以外,還可以作為運(yùn)算符,用來(lái)取出指針變量所指向的內(nèi)存地址里面的值。
而&運(yùn)算符用來(lái)取出一個(gè)變量所在的內(nèi)存地址。
背會(huì)理解了這幾句,可以說(shuō)指針的理論基礎(chǔ)就有了。跨過(guò)去指針這一關(guān),C 語(yǔ)言最硬核的部分也就掌握了。
OK,今天就簡(jiǎn)單聊到這里,希望阮一峰老師的這份教程能幫助到大家。我們下期見(jiàn)~
