學C,通持辗穑看上一兩本入門書足矣(水貨如我俊嗽,就看過一本譚浩強),而書之好壞無所謂铃彰,怎么都能把你整入門了绍豁,而你一入門,便不太可能再去讀一本更好的入門經(jīng)典牙捉。于是我產(chǎn)生了把主流竹揍、經(jīng)典的C入門書籍都擼一遍的念頭敬飒,比比看,到底哪(些)本最適合入門——專業(yè)蛋疼芬位,請勿模仿——一來彌補自己錯過的好書(學習機會)无拗,二來供準備學C的朋友參考(少走彎路)。
不管你學什么昧碉,入門書就如啟蒙老師一樣重要英染,老師不好,你對所學內(nèi)容都會產(chǎn)生排斥心理被饿,啟蒙好了四康,這門手藝甚至可能成為你的看家本領(lǐng)。C語言規(guī)模并不龐大锹漱,但所含知識點比較雜亂箭养,所有教材都這么些內(nèi)容,就看編者以什么順序哥牍、什么主次毕泌、什么表達方式講述。私以為一本好的入門書應(yīng)具備以下兩個特點:一是親和易讀嗅辣,如同一個故事娓娓道來撼泛,你翻開的是一個多彩的世界,而不是一本僵硬的字典澡谭;二是分量足夠愿题,看完它你就真正入門了,有些書大白話噼里啪啦扯了半天乍感覺挺有意思其實沒啥內(nèi)容蛙奖,當你真正著手使用時才發(fā)現(xiàn)還得再看本別的潘酗。國內(nèi)良莠不齊的C教程數(shù)不勝數(shù),同名如“C程序設(shè)計”“C語言程序設(shè)計”“C語言程序設(shè)計教程”的都多如牛毛雁仲,這些不知名的就不予考慮了仔夺,要看就看經(jīng)典。
→ 如果你是零基礎(chǔ)
《明解C語言》(337頁)推薦指數(shù):★★★★★
乍一看還以為是本新書攒砖,但原版在1999年就發(fā)行了缸兔,引進得實在太晚。屬于比較嚴肅的教材吹艇,忠誠于專業(yè)術(shù)語惰蜜,并未考慮更通俗的表達方式,并涉及一些算法受神,適合正兒八經(jīng)地學C抛猖;內(nèi)容組織很成功(把排序放在結(jié)構(gòu)體部分的做法很神奇),循序漸進,知識點比較淺财著,并不全面养交,相對偏僻及細枝末節(jié)的內(nèi)容沒有講述(也不必要拿來讓初學者頭大),沒有冗余瓢宦,應(yīng)該靜下心來一字一句地看,一丁點也不容錯過灰羽。PS:把C歷史背景放在附錄不失為聰明的做法驮履,畢竟比起發(fā)展史什么的,讀者可能更關(guān)心如何立馬寫個hello world廉嚼。
《21天學通C語言》(614頁)推薦指數(shù):★★★★★
槽點一:這書名也忒俗了吧玫镐,這類書一般不都是水貨嗎?
解釋:確實擁有這類書名總是要為人所詬病怠噪,但你千萬不該因此而錯過此書恐似。這是本來自國外的教程,原名還就是“Sams Teach Yourself C in 21 Days”傍念,然其質(zhì)量是國內(nèi)那些名字類似的書所難以相比的矫夷。
槽點二:614頁,也忒厚了吧憋槐!完全是學霸級初學者專用啊双藕。
解釋:C語言的21天課程其實只占了前431頁,后面是C++阳仔、Java忧陪、C#等附加課程,不在本次自虐活動范圍之內(nèi)近范,故我也沒有看嘶摊。
本書把C的每一部分都講解得特別細致,附有例子评矩、經(jīng)驗叶堆、注意點、建議等稚照,還詳細地介紹了各種你腦中可能會產(chǎn)生的疑問或在實踐中可能會遇到的問題蹂空。有些教材或多或少顯性或隱性地要求讀者能夠舉一反三,而此書不僅介紹了“一”果录,把“三”也逐一講解了(比如各知識點的組合運用)上枕。沒有死循知識結(jié)構(gòu)安排內(nèi)容,而是按照讀者慢慢適應(yīng)的學習過程循序漸進弱恒。為確保讀者理解清楚辨萍,提前使用時簡要介紹過的知識點會在后續(xù)章節(jié)重新詳解。
然而跑上來給的例子并不簡單,一股腦兒介紹不少東西锈玉,零基礎(chǔ)者看著可能會有點頭大爪飘。還存在一些不嚴謹?shù)牡胤剑m談不上誤導拉背,但可能會引起困惑师崎。除去這些瑕疵,我終究是被它驚艷到了椅棺,力薦之犁罩。PS:我看的這2012年8月第一次印刷的版本有不少印刷錯誤,希望后續(xù)印版會有校正两疚。
《C Primer Plus》(626頁)推薦指數(shù):★★★★★
怎么說呢床估,看得出這樣的作者才是真正懂C堕虹、愛C的人蛋欣,對各個版本的C標準了如指掌。好比寫文章斤斧,沒有才華的人生搬硬套才把事情講清楚勺美,而渾身才氣的人稍微抖一抖递胧,文字就散落成一篇佳作。第一章概覽就把我赤裸裸地驚艷到了赡茸,同樣介紹C的歷史及背景谓着,卻不是其他書那樣死板的陳列,語言精煉意賅坛掠,不需講的果斷不講赊锚,需要講的一語中的,沒有廢話屉栓,一氣呵成舷蒲。恨自己當初學C看的不是這本。
跑上來一股腦介紹的東西很多友多,很細牲平,初學者可能見了頭大,但你若能耐下性子細細看懂域滥,必會感嘆它講得真棒纵柿。行文極其精致、嚴謹启绰,即使初學者可能體會不到這一點昂儒;內(nèi)容詳盡、細致委可,無愧于書的厚度渊跋,常用的不常用的,基礎(chǔ)應(yīng)用高級應(yīng)用,大庭廣眾下的犄角旮旯里的應(yīng)有盡有拾酝;全方位多層次實用技巧燕少、注意事項,示例經(jīng)典蒿囤,醍醐灌頂客们,兼具入門書與工具書的氣質(zhì)。
總體上云巔工作室譯得還算不錯材诽,但你依然會遇到一些拗口的句子镶摘,然而畢竟瑕不掩瑜,書的總體質(zhì)量擺在那里岳守,看引進第六版時能不能譯得更好些。
《啊哈C碌冶!思考快你一步》(191頁)推薦指數(shù):★★★★☆
這是唯一一本實體書和電子版我都沒能接觸到的,或許是不夠熱門扑庞,網(wǎng)上找不到完整的pdf譬重,連出版前的草稿版《啊哈C語言》也僅公開了一半。若是有朋友能搞到完整的電子版罐氨,懇請予我共享一份臀规。我這里看的便是只有一半內(nèi)容的先行版(以及正式版的幾十頁試讀樣章),還帶著新鮮的錯別字和病句栅隐,但版面接近正式版塔嬉,讀起來也是比較舒適的。
不知道啊哈磊(作者)這哥們是何方神圣租悄,也僅是個有想法的普通人吧谨究,書上是這么介紹的:“曾在中科院玩過單片機。武漢大學歷史上第一位以本科生身份加入MSRA的小伙伴泣棋,在機器學習組從事搜索引擎方面的研究胶哲。發(fā)表國際會議論文一篇(IEEE)。全國青少年信息學奧林匹克金牌教練潭辈⊙煊欤”我很喜歡這樣年輕一代人寫的書,用語隨意把敢,帶著顏表情寄摆,博文style,沒有套話修赞,沒有代溝冰肴,看著很親近。本書號稱是“小學生坐在馬桶上都可以讀懂的‘C語言編程’入門書”,你可能不信熙尉,大學生都喊著學C枯燥联逻,小學生那點基礎(chǔ)和智商就甭提了,可本書還真夠小學生看懂检痰,我甚至覺得有些地方還能寫得更萌包归、更形象些。不過小學生能接受的程度畢竟是有限的铅歼,本書定位是如此的低公壤,以至于只介紹了C最淺的那部分知識,更多篇幅用來舉例椎椰、增加讀者的編程興趣厦幅,簡直太適合零基礎(chǔ)入門了!而啊哈磊自己基于gcc做的啊哈C編譯器也非常適合初學者練習編程慨飘,就像他自己說的确憨,是簡潔得不能再簡潔的C語言編程軟件,沒有工程的概念瓤的、沒有編譯鏈接的步驟休弃、沒有環(huán)境配置,各種沒有圈膏,你一打開連代碼框架都已經(jīng)寫好了塔猾,是專為初學者制作的良心產(chǎn)品。
《C程序設(shè)計》(第三版378頁稽坤、第四版390頁)推薦指數(shù):★★☆☆☆
把“發(fā)行逾1100萬冊”的消息印在封面大中央的做法實在太中二了丈甸,你就是本指定教材又不是暢銷書,全國高校都用你不破千萬才怪呢尿褪!并且老虫,千萬的銷量同時也意味著接受千萬讀者的檢驗,稍欠嚴謹即易被噴茫多。網(wǎng)上有個500多頁的word文檔(百度“《C程序設(shè)計》錯誤”即可找到)祈匙,簡直太蛋疼了,他寫得完別人也看不完疤煲尽夺欲!本書確實不夠嚴謹+印刷問題層出+許多地方還存在嚴重錯誤,但這份文檔有點吹毛求疵今膊,其中不少說法令人難以茍同些阅,500多頁的規(guī)模水分太大。
這本教材斑唬,初學者拿來學編程確實較易理解市埋,但對C語言的把握會有一定偏差黎泣,慎讀。而我們不妨暫且忽略其中的一些重大問題缤谎,重新審視之抒倚。作為國內(nèi)教材中的典范,此書雖然在內(nèi)容組織上依然中規(guī)中矩坷澡,但知識點講解十分通俗托呕,由于通俗,稍顯(我是說稍顯)啰嗦频敛。做教材可以项郊,不適合自學,因為你不能確定哪些是次要的斟赚。畢竟作為一本國家級教材着降,該涵括的都得涵括,不僅要領(lǐng)人進門拗军,還得保證讀者達到能考試的程度任洞;擺脫不了應(yīng)試教育的特點,為了鞏固知識點食绿,時不時會冒出(i++)+(i++)+(i++)和a+=a-=a*=a這樣神奇的式子。如果你喜歡這種style公罕,千萬不要錯過此書器紧,沒錯,我當年就有點喜歡這種style楼眷,乃覺這書不錯的原因之一——竟然讓我搞懂了這么復(fù)雜混亂的玩意(后來才發(fā)現(xiàn)實際編程中根本沒人這么做)铲汪!
→ 如已學過一丟丟
《C程序設(shè)計語言》(258頁)推薦指數(shù):★★★★★
昵稱K&R(兩位作者姓氏首字母),C語言之父的作品罐柳,就好比向別人介紹自己的孩子掌腰,不能再精辟,不能再權(quán)威张吉,被奉為C語言圣經(jīng)齿梁。在C還沒有統(tǒng)一標準的年代,78年K&R的第一版直接被廣泛接受為C標準肮蛹,其他號稱是圣經(jīng)的C語言書用詞未免也太想當然了……
圣經(jīng)就好比一件標準模板勺择,國內(nèi)外數(shù)不清的C教程都是參照K&R寫的,一如大堆的瀏覽器都使用了IE內(nèi)核一樣伦忠。B5的開本短短258頁省核,除去供查閱的附錄僅166頁,再除去第8章“Unix系統(tǒng)接口”僅剩148頁昆码,這么少的篇幅將C語言講得清清楚楚气忠,簡直是場華麗的藝術(shù)邻储!
此書寫得非常嚴謹,必要之處還提及老版C的情況旧噪,可以說學C必看吨娜,但并不適合零基礎(chǔ)入門,正如其第1版序中所言:“本書并不是一本有關(guān)程序設(shè)計的入門性手冊舌菜,它要求讀者熟悉基本的程序設(shè)計概念萌壳,如變量、賦值語句日月、循環(huán)和函數(shù)等袱瓮。”從頭至尾使用的均是書面化的術(shù)語爱咬,并涉及到逆波蘭尺借、二叉樹、Unix等專業(yè)知識精拟,還時常將C與Fortran燎斩、Pascal語言進行比較,你若不了解這些看著一定頭痛蜂绎,因此K&R并不是入門的最佳選擇栅表。
《C語言入門經(jīng)典》(第4版571頁、第5版584頁)推薦指數(shù):★★★☆☆
一看這霸氣的書名就知道它是部經(jīng)典师枣,當然這是譯名怪瓶,(第4版)原名為“Beginning C: From Novice to Professional”,表達多中肯践美,沒錯洗贰,form的是novice,首先你得是個novice陨倡,前言中果斷暗示你最好此前接觸過編程這玩意兒敛滋。內(nèi)容是一整塊一整塊講的,力爭全面兴革、深入绎晃,沒有輕重緩急,講完講透為止杂曲,必要時毫不客氣地使用后面才細講的技術(shù)箕昭,導致一下子有過量知識點展現(xiàn)在讀者面前。多數(shù)章尾有個程序設(shè)計的例子解阅,而這些例子對于初學者來說也明顯過于復(fù)雜落竹。
最要命的是,(第4版)我已經(jīng)看得相當粗略货抄,但依然發(fā)現(xiàn)了幾處嚴重的錯誤述召,不是筆誤也不是印刷問題朱转,為排除翻譯出錯的可能,特意比照了英文原版积暖,(同時也排除了C標準版本的因素)確實有錯(下面例舉兩處藤为,尚未學C的朋友請直接跳過)。此外夺刑,不少地方講得不夠清楚缅疟,我本懷著崇敬之情拜讀,結(jié)果最終對其印象并不太好遍愿。
錯誤1(第5版修復(fù))
P267關(guān)于realloc()函數(shù):顯然,第二個參數(shù)的值不應(yīng)超過以前分配的字節(jié)數(shù)沼填。否則桅咆,新分配的內(nèi)存將與以前分配的內(nèi)存區(qū)域大小相同。
原版P270:Obviously the value of the second argument should not exceed the number of bytes that was previously allocated. If it is, you will only get a memory area allocated that is equal to the size of the previous memory area.
錯誤2(第5版未修復(fù))
P462關(guān)于流:流是外部數(shù)據(jù)源或數(shù)據(jù)目的地的抽象表示坞笙,所以鍵盤岩饼、顯示器上的命令行和文件都是流⊙σ梗……將數(shù)據(jù)寫入流(即磁盤文件)有兩種方式籍茧。
原版P468:A stream is an abstract representation of any external source or destination for data, so the keyboard, the command line on your display, and files on disk are all examples of streams....There are two ways of writing data to a stream that is a disk file.
第5版的改動非常小,將第4版九成內(nèi)容照搬梯澜,就最后增加了一章“Advanced and Speciallized Topics”(高級專用主題)寞冯,介紹Unicode、線程等腊徙,講得也不易理解甚至不知所云简十。倒是在排版上有所進步檬某,更適于閱讀撬腾,如果你硬要來上一本,第5版會更好一些恢恼。
《嗨翻C語言》(588頁)推薦指數(shù):★★★★☆
莫被這厚度嚇怕民傻,它的字很大,空白很大场斑,圖片很多……如果把一般的專業(yè)書比作word文檔漓踢,那么《嗨翻C語言》就是ppt,各種字體漏隐,各種插圖(即使多數(shù)只意增加趣味而與正式內(nèi)容關(guān)聯(lián)不大)喧半,你會覺得眼前一亮,比如:
右下那壯漢居然在想(說青责?):“可我喜歡這一張挺据,上面有小貓咪呢取具!”諸如此類數(shù)不勝數(shù),隨便翻開一頁都能碰到這樣個無厘頭的吐槽或瘋話扁耐,惡搞無極限暇检;知識點與劇情飽滿的故事結(jié)合在一起,想忘都難婉称;譯者也幽默風趣块仆,做了不少本土化的工作,比如“三位鉆石王老五準備參加今天的‘非誠勿擾’”……總體感覺甚至像一本幼兒園的啟蒙畫冊王暗。(Head First系列都這個無腦樣我會亂說悔据?)
在開講知識點前先引導讀者自己思考,猜猜這些東西是干啥的瘫筐,甚至時常讓你站在編譯器或者語言設(shè)計者的角度思考問題蜜暑,這些做法很獨特,讓你從一開始就從很本質(zhì)的層面去接觸C策肝;同時督促讀者動腦肛捍,練習題有趣而簡短,提示之众、答案及講解也非常到位拙毫。然而書里充斥著鮮明的老美風格,很high很激情棺禾,可以想象美國學生讀了本書極可能做出很實際很創(chuàng)意的東西缀蹄,而中國的學生讀著可能感覺反而有點混亂。并且它起點不低膘婶,相當不低缺前,明確地說,適合學過其他語言(如Python)的人用來學C悬襟,后半部分的高級應(yīng)用更是涉及操作系統(tǒng)和網(wǎng)絡(luò)的知識衅码,盡管它也做了簡單介紹,但我相信沒接觸過的朋友一下子還是難以接受的脊岳。
《C語言點滴》(302頁)推薦指數(shù):★★★★★
看得出作者確實是個有熱情有想法的好老師逝段,語言輕松幽默有內(nèi)涵,跑上來1.1節(jié)裝備篇大話程序員屌絲著裝就能閃瞎你眼割捅。真正意義上的由淺入深奶躯,一開始淺得連水都沒有,然后不知不覺就潛到了馬里亞納海溝亿驾。內(nèi)容并不系統(tǒng)嘹黔,比起其他的C語言書,它不是教材而是教輔莫瞬,更多的是總結(jié)性的東西(使用技巧注意事項什么的)——作者總結(jié)了自己教學過程中常見的問題與經(jīng)驗儡蔓,參考了一些經(jīng)典之作醉锄,對其中內(nèi)容進行了二次包裝之后以更易理解的方式呈現(xiàn)給讀者——而與其說是查漏補缺的教輔,其實又更像是心得寫得不錯的系列博文浙值,無論你對C掌握程度如何恳不,讀一下多少會有所收獲。
那么之于初學者开呐,相比零基礎(chǔ)或?qū)W過其他語言烟勋,你最好是學過一點C,哪怕只有一丁點筐付。有不少術(shù)語是在不解釋的情況下出現(xiàn)的卵惦,你手頭最好還有一本主力教材。本書專打輔助瓦戚,但把重難點剖析得十分清楚沮尿,對初學者快速、準確地掌握知識點很有幫助较解。如果你有地方看不明白畜疾,不必焦慮,它本來就是“點滴”印衔,暫時漏掉幾滴無傷大雅啡捶,日后再補不遲。
PS:全書沒啥可吐槽的奸焙,唯獨1.2節(jié)安排不佳:從搜索引擎瞎暑、e-mail、聊天工具与帆、社交網(wǎng)站了赌、論壇、博客玄糟、下載說起勿她,哦不,是教起茶凳,準確地說是零基礎(chǔ)教起嫂拴,雖然說得挺有意思播揪,但其實沒有必要贮喧,現(xiàn)在只要有點文化水平的,即使是小學生甚至幼兒園的小朋友也都會上網(wǎng)猪狈,而沒有文化水平的箱沦,不識字的,也根本不會用電腦雇庙,更不可能來看C語言谓形,換個角度灶伊,學C的讀者還不會上網(wǎng)嗎,這些東西是寫給誰看呢寒跳?