一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何以最小的代價(jià)學(xué)習(xí)并精通C語(yǔ)言

Q4MP_gh_c472c21 ? 來(lái)源:嵌入式ARM ? 作者:嵌入式ARM ? 2020-10-12 17:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

學(xué)習(xí)C語(yǔ)言不是一朝一夕的事情,但也不需要花費(fèi)十年時(shí)間才能精通。如何以最小的代價(jià)學(xué)習(xí)并精通C語(yǔ)言是本文的主題。請(qǐng)注意,即使是“最小的代價(jià)”,也絕不是什么捷徑,而是以最短的時(shí)間取得最多的收獲,同時(shí)也意味著你需要經(jīng)歷艱苦的過(guò)程。

一、要讀就讀好書(shū),否則不如不讀

所有初學(xué)者面臨的第一個(gè)問(wèn)題便是:如何選擇教材。好的開(kāi)始是成功的一半,選擇一本優(yōu)秀的教材是事半功倍的關(guān)鍵因素。不幸的是,學(xué)校通常會(huì)幫你指定一本很差勁的C語(yǔ)言課本;而幸運(yùn)的是,你還可以再次選擇。

大名鼎鼎的譚浩強(qiáng)教授出了一本《C語(yǔ)言程序設(shè)計(jì)》,據(jù)說(shuō)發(fā)行量有超過(guò)400萬(wàn),據(jù)我所知,很多學(xué)校都會(huì)推薦這本書(shū)作為C語(yǔ)言課本。雖然本人的名字(譚浩宇)跟教授僅僅一字之差,但我是無(wú)比堅(jiān)定地黑他這本書(shū)的。這本書(shū)不是寫(xiě)給計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生的,而是給那些需要考計(jì)算機(jī)等級(jí)考試的其它專(zhuān)業(yè)學(xué)生看的。這本書(shū)的主要缺點(diǎn)是:例子程序非常不專(zhuān)業(yè),不能教給你程序設(shè)計(jì)應(yīng)該掌握的思考方式;程序風(fēng)格相當(dāng)?shù)夭缓?,?huì)讓你養(yǎng)成亂寫(xiě)代碼的惡習(xí);錯(cuò)誤太多,曾經(jīng)有人指出過(guò)這本書(shū)的上百個(gè)錯(cuò)誤,其中不乏關(guān)鍵的概念性錯(cuò)誤。好了,這本書(shū)我也不想說(shuō)太多了,有興趣大家可以百度一下:)

Kernighan和Ritchie的《The C Programming Language》(中譯名《C程序設(shè)計(jì)語(yǔ)言》)堪稱(chēng)經(jīng)典中的經(jīng)典,不過(guò)舊版的很多內(nèi)容都已過(guò)時(shí),和現(xiàn)在的標(biāo)準(zhǔn)C語(yǔ)言相去甚遠(yuǎn),大家一定要看最新的版本,否則不如不看。另外,即使是最經(jīng)典最權(quán)威的書(shū),也沒(méi)有辦法面面俱到,所以手邊常備一本《C語(yǔ)言參考手冊(cè)》是十分必要的?!禖語(yǔ)言參考手冊(cè)》就是《C Reference Manual》,是C語(yǔ)言標(biāo)準(zhǔn)的詳細(xì)描述,包括絕大多數(shù)C標(biāo)準(zhǔn)庫(kù)函數(shù)的細(xì)節(jié),算得上是最好的標(biāo)準(zhǔn)C語(yǔ)言的工具書(shū)。順便提一句,最新的《C程序設(shè)計(jì)語(yǔ)言》是根據(jù)C89標(biāo)準(zhǔn)修訂的,而《C語(yǔ)言參考手冊(cè)》描述的是C99標(biāo)準(zhǔn),二者可能會(huì)有些出入,建議按照C99標(biāo)準(zhǔn)學(xué)習(xí)。還有一本《C和指針》,寫(xiě)得也是相當(dāng)?shù)夭诲e(cuò),英文名是《Pointers on C》,特別地強(qiáng)調(diào)指針的重要性,算是本書(shū)的一個(gè)特點(diǎn)吧。不過(guò)這本書(shū)并不十分適合初學(xué)者,如果你曾經(jīng)學(xué)過(guò)C語(yǔ)言,有那么一些C語(yǔ)言的基礎(chǔ)但又不是很扎實(shí),那么你可以嘗試一下這本書(shū)。我相信,只要你理解了指針,C語(yǔ)言便不再神秘。

如果你已經(jīng)啃完了一本C語(yǔ)言教材,想要更進(jìn)一步,那么有兩本書(shū)你一定要看。首先是《C Traps and Pitfalls》(中譯名《C陷井與缺陷》),很薄的一本小冊(cè)子,內(nèi)容非常非常地有趣。要注意一點(diǎn),這本書(shū)是二十多年前寫(xiě)成的,里面提到的很多C語(yǔ)言的缺陷都已被改進(jìn),不過(guò)能夠了解一些歷史也不是什么壞事。然后你可以挑戰(zhàn)一下《Expert C Programming》(中譯名《C專(zhuān)家編程》),書(shū)如其名,這本書(shū)頗具難度,一旦你仔細(xì)讀完并能透徹理解,你便可以放心大膽地在簡(jiǎn)歷上寫(xiě)“精通C語(yǔ)言”了。

切記一個(gè)原則,不要讀自己目前還看不懂的書(shū),那是浪費(fèi)生命。如果你看不懂,那你一定是缺失了某些必需基礎(chǔ)知識(shí)。此時(shí),你要仔細(xì)分析自己需要補(bǔ)充哪些內(nèi)容,然后再去書(shū)店尋找講述的這些內(nèi)容的書(shū)籍。把基礎(chǔ)知識(shí)補(bǔ)充完畢再回頭來(lái)學(xué)習(xí),才會(huì)真正的事半功倍。

二、Unix/Linux還是Windows,這是個(gè)很大的問(wèn)題

不同的編程環(huán)境會(huì)造就出不同思維的程序員。Windows的程序員大多依賴(lài)集成開(kāi)發(fā)環(huán)境,比如Visual Studio,而Unix程序員更加鐘愛(ài)Makefile與控制臺(tái)。顯而易見(jiàn),集成開(kāi)發(fā)環(huán)境更容易上手,在Windows上學(xué)習(xí)C語(yǔ)言,只需要會(huì)按幾個(gè)基本的Visutal C++工具欄按鈕就可以開(kāi)始寫(xiě)Hello, World!了,而在Unix下,你需要一些控制臺(tái)操作的基本知識(shí)。有人也許認(rèn)為Unix的環(huán)境更簡(jiǎn)潔,但習(xí)慣的力量是很大的,大家都很熟悉Windows的基本操作,而為了學(xué)習(xí)C語(yǔ)言去專(zhuān)門(mén)裝一個(gè)Unix系統(tǒng),似乎有點(diǎn)不劃算。

對(duì)于一個(gè)只懂得Windows基本操作、連DOS是什么都不知道的新手而言,盡快做一些有趣而有意義的事情才是最重要的。用C語(yǔ)言寫(xiě)一個(gè)小程序遠(yuǎn)比學(xué)習(xí)ls、cat等命令有趣,況且我們要專(zhuān)注于C語(yǔ)言本身,就不得不暫時(shí)忽略一些東西,比如編譯鏈接的過(guò)程、Makefile的寫(xiě)法等等等等。

所以我建議初學(xué)者應(yīng)該以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++作為主要的學(xué)習(xí)環(huán)境,而且千萬(wàn)不要在IDE的使用技巧上過(guò)多糾纏,因?yàn)榻窈竽阋欢ㄒD(zhuǎn)向Unix環(huán)境的。Visual C++ 6.0使用很方便,調(diào)試也很直觀,但其默認(rèn)的編譯器對(duì)C標(biāo)準(zhǔn)的支持并不好,而Dev C++使用gcc編譯器,對(duì)C99的標(biāo)準(zhǔn)都支持良好。使用順帶提一下,很多大學(xué)的C語(yǔ)言課程還在使用Turbo C 2.0作為實(shí)驗(yàn)環(huán)境,這是相當(dāng)不可取的,原因其一是TC 2.0對(duì)C標(biāo)準(zhǔn)幾乎沒(méi)有支持,其二是TC 2.0編譯得到的程序是16位的,這對(duì)今后理解32位的程序會(huì)造成極大的困擾(當(dāng)然,用djgpp之類(lèi)的東西可以使TC 2.0編譯出32位程序,不過(guò)那過(guò)于復(fù)雜了)。

等你學(xué)完一本C語(yǔ)言的教材,你一定要轉(zhuǎn)向Unix平臺(tái)繼續(xù)學(xué)習(xí),幾乎所有的C語(yǔ)言高級(jí)教程都是基于Unix平臺(tái)的(比如《C專(zhuān)家編程》)。轉(zhuǎn)變的過(guò)程是痛苦的,你需要面對(duì)的是各種紛繁復(fù)雜的命令,完全不同于Windows平臺(tái)的思考方式,但是這種痛苦是值得的。Unix與C是共生的,Unix的思考方式和習(xí)慣更加符合C語(yǔ)言的思考方式和習(xí)慣。在Unix下,你可以找到無(wú)數(shù)優(yōu)秀的源代碼供你盡情閱讀,你可以方便地查看某個(gè)庫(kù)函數(shù)的聯(lián)機(jī)手冊(cè),還可以看到最優(yōu)秀的代碼風(fēng)格(說(shuō)到代碼風(fēng)格,我會(huì)專(zhuān)門(mén)寫(xiě)一篇文章詳細(xì)敘述)。

歸結(jié)起來(lái)就是一句話:初學(xué)C語(yǔ)言,建議使用Windows系統(tǒng)和集成開(kāi)發(fā)環(huán)境,在準(zhǔn)備向“高手”方向努力時(shí),請(qǐng)先轉(zhuǎn)向Unix平臺(tái)。

三、萬(wàn)事俱備,你就是東風(fēng)

書(shū)已選定,環(huán)境配置完成,正所謂萬(wàn)事俱備,只欠你自己的努力了。請(qǐng)從書(shū)的前言開(kāi)始,仔細(xì)地閱讀手頭的教材,很多人看書(shū)喜歡直接從第一章開(kāi)始看,這是錯(cuò)誤的做法。前言是作者對(duì)整本書(shū)的大體介紹,作者一般會(huì)告訴你需要什么基礎(chǔ)才能夠順利閱讀本書(shū),這可以幫助你檢驗(yàn)自己的基礎(chǔ)知識(shí)是否已經(jīng)具備??赐昵把?,還要瀏覽一下目錄,了解一下書(shū)的整體結(jié)構(gòu),順便給自己安排一下學(xué)習(xí)計(jì)劃。

學(xué)習(xí)C語(yǔ)言,必需注意每一個(gè)細(xì)節(jié),書(shū)上的例子代碼一定要自己親自敲一遍,編譯執(zhí)行輸出都跟書(shū)上說(shuō)的一致才能算是學(xué)完了一個(gè)例子,如果不一致,就要仔細(xì)找原因。出了書(shū)本上有的例子,自己還要“創(chuàng)造”一些例子,比如學(xué)習(xí)運(yùn)算符優(yōu)先級(jí)的時(shí)候,可以寫(xiě)幾個(gè)相同的表達(dá)式,在不同的位置加上括號(hào),看看有哪些不同的行為,比如*p++和(*p)++,又比如a = b == c、(a = b) == c和a = (b == c)等等。自己抄的書(shū)上的例子以及改造之后的例子,還有自己“創(chuàng)造”的例子,都應(yīng)該仔細(xì)地歸類(lèi)保存,并且要在源代碼中寫(xiě)上簡(jiǎn)短的注釋?zhuān)U述這個(gè)例子的意圖。

例子之后就是習(xí)題了,我建議初學(xué)者把所有的習(xí)題都獨(dú)立做一遍,然后對(duì)照答案的代碼,看看自己的代碼有那些不足,再試著修改自己的代碼。很多人不重視習(xí)題,這是極大的錯(cuò)誤,因?yàn)樽髡咄ǔ?huì)在習(xí)題中說(shuō)明一些重要的道理,而不是單純地檢驗(yàn)前面的知識(shí)。

也許你認(rèn)為這樣學(xué)習(xí)太慢,其實(shí)不然。學(xué)得細(xì)致就不用走回頭路,等你學(xué)到后面才發(fā)現(xiàn)自己前面沒(méi)搞清楚,那才是真的得不償失。一般說(shuō)來(lái),整本書(shū)讀完,你應(yīng)該完成數(shù)千行乃至上萬(wàn)行的代碼,無(wú)論是原封不動(dòng)照抄書(shū)上的,還是自己心血來(lái)潮寫(xiě)就的,都是今后繼續(xù)學(xué)習(xí)的一筆財(cái)富。以我自己舉例,閱讀《Windows核心編程》時(shí)(我只閱讀了3/4的內(nèi)容),除了抄書(shū)上的代碼,還自己寫(xiě)了很多例子,一共有5574行(用unix下的wc工具統(tǒng)計(jì)),時(shí)隔多日,我早已記不清Windows的系統(tǒng)編程了,但只要花幾分鐘翻出以前的代碼看看,便會(huì)重新了然于胸。所謂好記性不如爛筆頭,就是這個(gè)道理。

仔細(xì)讀書(shū)、認(rèn)真抄寫(xiě)源代碼、獨(dú)立完成習(xí)題外加更進(jìn)一步的實(shí)驗(yàn),最后將所有的代碼留下,成為自己的經(jīng)驗(yàn)和財(cái)富,絕對(duì)的辛苦,也絕對(duì)的事半功倍。當(dāng)然,這種方式只適合學(xué)習(xí)需要精通的技術(shù),如果不是學(xué)習(xí)C語(yǔ)言,你還要具體情況具體分析。

寫(xiě)到最后,還有非常非常重要的一點(diǎn)沒(méi)有提及──代碼風(fēng)格,從最開(kāi)始學(xué)習(xí)就必須強(qiáng)迫自己模仿最優(yōu)秀的代碼風(fēng)格。

責(zé)任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11507

    瀏覽量

    213498
  • 控制臺(tái)
    +關(guān)注

    關(guān)注

    0

    文章

    85

    瀏覽量

    10612
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7631

    瀏覽量

    141363

原文標(biāo)題:推薦給初學(xué)者的箴言:如何學(xué)好C語(yǔ)言

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語(yǔ)言精彩編程百例-364頁(yè)

    和低級(jí)語(yǔ)言的優(yōu)點(diǎn),因此,在工程計(jì)算及應(yīng)用程序開(kāi)發(fā)中得到了廣泛的應(yīng)用。 眾所周知,學(xué)習(xí)新的程序設(shè)計(jì)語(yǔ)言的最佳途徑是編寫(xiě)程序,而本書(shū)正是通過(guò)了對(duì)100個(gè)典型實(shí)例的分析和講解,來(lái)幫助讀者掌握這門(mén)語(yǔ)言
    發(fā)表于 06-13 17:28

    深入理解C語(yǔ)言C語(yǔ)言循環(huán)控制

    改變程序的執(zhí)行流程,使代碼更加靈活和可控。本文將詳細(xì)介紹這些語(yǔ)句的作用及其應(yīng)用場(chǎng)景,通過(guò)示例代碼進(jìn)行說(shuō)明。Part.1break語(yǔ)句C語(yǔ)言中break語(yǔ)句有兩種
    的頭像 發(fā)表于 04-29 18:49 ?1080次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>循環(huán)控制

    如何在 樹(shù)莓派 上編寫(xiě)和運(yùn)行 C 語(yǔ)言程序?

    在本教程中,我將討論C編程語(yǔ)言是什么,C編程的用途,以及如何在RaspberryPi上編寫(xiě)和運(yùn)行C程序。本文的目的是為您介紹在RaspberryPi上進(jìn)行
    的頭像 發(fā)表于 03-25 09:28 ?525次閱讀
    如何在 樹(shù)莓派 上編寫(xiě)和運(yùn)行 <b class='flag-5'>C</b> <b class='flag-5'>語(yǔ)言</b>程序?

    51單片機(jī)C語(yǔ)言學(xué)習(xí)筆記

    c51語(yǔ)言快速入門(mén)
    發(fā)表于 03-24 14:04 ?3次下載

    為什么學(xué)了C語(yǔ)言,卻寫(xiě)不出像樣的項(xiàng)目?

    學(xué)習(xí)編程的路上,C語(yǔ)言幾乎是每個(gè)程序員的“必修課”。不管你是打算從事嵌入式開(kāi)發(fā)、系統(tǒng)編程,還是想要深入理解操作系統(tǒng)的底層原理,C語(yǔ)言都是一
    的頭像 發(fā)表于 03-14 17:37 ?420次閱讀
    為什么學(xué)了<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>,卻寫(xiě)不出像樣的項(xiàng)目?

    Triton編譯器支持的編程語(yǔ)言

    編寫(xiě)和優(yōu)化深度學(xué)習(xí)代碼。Python是一種廣泛使用的高級(jí)編程語(yǔ)言,具有簡(jiǎn)潔易讀、易于上手、庫(kù)豐富等特點(diǎn),非常適合用于深度學(xué)習(xí)應(yīng)用的開(kāi)發(fā)。 二、領(lǐng)域特定語(yǔ)言(DSL) Triton也提供
    的頭像 發(fā)表于 12-24 17:33 ?939次閱讀

    自然語(yǔ)言處理與機(jī)器學(xué)習(xí)的關(guān)系 自然語(yǔ)言處理的基本概念及步驟

    Learning,簡(jiǎn)稱(chēng)ML)是人工智能的一個(gè)核心領(lǐng)域,它使計(jì)算機(jī)能夠從數(shù)據(jù)中學(xué)習(xí)做出預(yù)測(cè)或決策。自然語(yǔ)言處理與機(jī)器學(xué)習(xí)之間有著密切的關(guān)系,因?yàn)闄C(jī)器
    的頭像 發(fā)表于 12-05 15:21 ?1944次閱讀

    NPU支持的編程語(yǔ)言有哪些

    與NPU一起使用: C/C++ : CC++是性能要求較高的應(yīng)用的首選語(yǔ)言,尤其是在需要直接與硬件交互的場(chǎng)景中。許多NPU硬件都提供了
    的頭像 發(fā)表于 11-15 09:21 ?1882次閱讀

    學(xué)習(xí)go語(yǔ)言的過(guò)程踩過(guò)的坑

    作為一個(gè)5年的phper,這兩年公司和個(gè)人都在順應(yīng)技術(shù)趨勢(shì),新項(xiàng)目慢慢從php轉(zhuǎn)向了go語(yǔ)言,從2021年到現(xiàn)在,筆者手上也先后開(kāi)發(fā)了兩個(gè)go項(xiàng)目。在學(xué)習(xí)go語(yǔ)言的過(guò)程中也學(xué)習(xí)
    的頭像 發(fā)表于 11-11 09:22 ?447次閱讀

    C語(yǔ)言指針學(xué)習(xí)筆記

    本文從底層內(nèi)存分析,徹底讓讀者明白C語(yǔ)言指針的本質(zhì)。
    的頭像 發(fā)表于 11-05 17:40 ?630次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>指針<b class='flag-5'>學(xué)習(xí)</b>筆記

    C語(yǔ)言與Java語(yǔ)言的對(duì)比

    C語(yǔ)言和Java語(yǔ)言都是當(dāng)前編程領(lǐng)域中的重要成員,它們各自具有獨(dú)特的優(yōu)勢(shì)和特點(diǎn),適用于不同的應(yīng)用場(chǎng)景。以下將從語(yǔ)法特性、內(nèi)存管理、跨平臺(tái)性、性能、應(yīng)用領(lǐng)域等多個(gè)方面對(duì)C
    的頭像 發(fā)表于 10-29 17:31 ?1038次閱讀

    Orin芯片的編程語(yǔ)言支持

    語(yǔ)言支持 Orin芯片支持多種編程語(yǔ)言,以滿足不同開(kāi)發(fā)者的需求。其中,C/C++和Python是兩種廣泛應(yīng)用的編程語(yǔ)言。
    的頭像 發(fā)表于 10-27 16:45 ?961次閱讀

    C語(yǔ)言關(guān)鍵字--typedef

    C語(yǔ)言關(guān)鍵字使用方法學(xué)習(xí)指南!
    的頭像 發(fā)表于 10-07 12:44 ?603次閱讀

    倉(cāng)頡語(yǔ)言書(shū)籍申請(qǐng)

    有接觸過(guò)其它的語(yǔ)言,主要是python,python用于機(jī)器學(xué)習(xí),數(shù)據(jù)分析是能滿足使用,但是用于開(kāi)發(fā)其他的東西就不能滿足了,我現(xiàn)在想學(xué)習(xí)另外一種語(yǔ)言,用于開(kāi)發(fā)一些硬件,之前有考慮過(guò)學(xué)
    發(fā)表于 08-06 08:37

    【《大語(yǔ)言模型應(yīng)用指南》閱讀體驗(yàn)】+ 基礎(chǔ)知識(shí)學(xué)習(xí)

    今天來(lái)學(xué)習(xí)語(yǔ)言模型在自然語(yǔ)言理解方面的原理以及問(wèn)答回復(fù)實(shí)現(xiàn)。 主要是基于深度學(xué)習(xí)和自然語(yǔ)言處理技術(shù)。 大
    發(fā)表于 08-02 11:03