天天看點

如何學習C語言?學C語言有什麼秘訣?

在 嵌入式 領域中大部分開發都會用到C語言。C語言簡潔、緊湊、使用友善靈活加上GNU在實際項目開發中所做的擴充,使得C語言在整個 嵌入式 開發過程中起着至關重要的作用,是以學好C語言也是嵌入式開發學習中重要環節。到底 如何學習C語言?學習C語言有什麼秘訣? 今天本為就為大家揭開這個謎底。學習C語言的秘訣:就是"一字真言,兩種态度,三個架構,四項注意"。

     一、一字真言

    學好C語言,一字真言,那就是"編".

    (一)編。

    學習C語言,乃至學習所有的語言,都講究一個動手--不是動手打人,而是動手程式設計式。你必須通過編寫程式來熟悉知識、了解知識。倘若隻學不編,隻看别人的程式,自己不動手寫,是不能從入門到精通的。要知道,在計算機界,隻說不練的人很欠揍。試想一下,你在哪裡辛辛苦苦的程式設計式,他卻站在一邊,如老闆一樣喋喋不休,對你提出這項意見,那項思路,甚至暢談自己程式設計将會如何如何,好像很牛皮的樣子,但就是不編一行代碼。估計大家碰上如此之人,隻會一個動作,那就是點選"踩".

    一個"編"字就可以學好C語言嗎?真的如此簡單嗎?不是的,僅僅"編"是不夠的,你還需要"我編".

    (二)我編。

    請注意修辭,"我"編!這個"我"其實就是隻"你",也就是學習C語言的人。

    大家在學習C語言時,要多編寫程式,比如學習連結清單時,要自己編寫連結清單程式,甚至自己編寫俄羅斯方塊等遊戲程式來練習。不過有個前提條件,你必須自己編寫這些所有的程式才有效果,如果你從網絡上下載下傳了某某源代碼,或者拷貝了同學的程式,任何大言不慚的說是自己編寫的,那麼我也隻能大言不慚的告訴你,這樣做出了養成偷竊的習慣外,沒有任何效果!

    有同學會問,那麼"親自"程式設計式總可以精通C語言了吧,其實還差一點點,僅僅"編"是不夠的,隻是"我編"還不足以精通,為了達到C語言的最高峰,你還需要"我編編編".

    (三)我編編編。

    "編"字重複三次,這裡的"三",代表多,意思是你必須多多的編寫程式。親自編寫10行代碼等于沒有編,親自編寫1000行代碼是遠遠不夠的,親自編寫1萬行代碼還馬馬虎虎,親自編寫10萬行代碼,你絕對成為程式員中的戰鬥員。

    乍一看10萬行代碼,估計有同學會先直挺挺的躺下去,然後又眼珠一轉站了起來--他們想起了壞主意。"不就是10萬行嗎,容易!現在的程式設計工具都有代碼生成功能,随便在VC中用滑鼠拖曳幾下,搞一個MFC視窗程式,系統就自動生成了幾百行的代碼。在搞幾個三方控件,幾千行代碼就生成了!"

    再次聲明,"編編編"是有字首的,那就是"我",也就是學習者自己,使用代碼自動生成工具産生的代碼難道是"學習者"編寫的?

    要不上有政策,下有對策,"不用代碼生成器,那麼就抄,照着輸入代碼就行!"哎,人不能無恥到那種地步!這十萬行代碼要"你"親自完成,親自在腦海中發芽、生根,再親自逐行輸入。這又不是什麼政績任務,也不是什麼形象工程,欺騙别人最終隻能是自欺欺人。

     二、兩種态度

    一般人提起C語言,常常一個字如影随形湧上心頭,那就是"難"!害怕啊,C語言真是太恐怖了,傳說中的指針真是太鋒利了,一不留神就把系統劃破,搞出幾個當機重新開機都是太正常不過了。

    其實沒有必要這麼擔心,本朝太祖曾經說過:"在戰略上藐視敵人,在戰術上重視敵人。"

    (一)戰略上藐視C語言

    其實,C語言也就是一個普通的語言而已,别把它想象的太難!與Java相比,C語言也隻是程式複雜一點、代碼冗長一點、庫函數少上一點、三方控件難學一點,編譯工具簡陋一點、指針麻煩一點,其他的都差不了多少,程式設計思想總是一樣、程式建構總是相同的、程式文法總是類似的、程式邏輯總是差不多的。

    沒有必要對C語言談虎色變,把他當成一門普通的語言就行了。要知道,就算C語言再難,總比彙編語言容易掌握、比機器語言容易記憶、比英語容易掌握。是以要自信!一切C語言都是紙老虎。

    (二)戰術上重視C語言

    雖然我們在C語言面前保持了激昂的鬥志,雖然我們無所畏懼。但是真正在學習得過程中,還是務必保持謙虛謹慎的态度,戒驕戒躁,不要因為搞了一兩個俄羅斯方塊遊戲程式就洋洋自得,以為老子天下第一,甚至隻遍了10行代碼,就到CSDN部落格中到處罵人,到處"踩"人的文章。要知道,"雄關漫道真如鐵,而今邁步從頭越",無論你學了多少,隻要還沒有走上工作崗位,那麼萬裡長征就隻是才邁出了第一步,還有很長的道路等待着你。

     三、三個架構

    學習C語言,"編"不是問題,問題是"編什麼"、"怎麼編"、"編多深",下面就來解決這些問題。

    (一)靜心不靜

    1、靜心。

    學習的過程,是一個漫長而枯燥的過程,學習者必須要有吃苦耐勞的準備,靜下心來,從大家的視覺中消失,經受一個長時間的程式設計學生過程。吃盡苦中苦,方成人上人!等你重新回到大家的視野時,你會有一個蛻變,那時一切的痛苦都将化為甘甜。

    來個IT版的例子。在遙遠的大洋彼岸,在微軟的IE橫行之前,在網際網路剛剛起步之時,有一個叫做"網景"的浏覽器占據了市場99%的份額,網景公司在當時的美國更是比易中天還如日中天。可是,大家知道這個"網景"浏覽器是誰開發的嗎?是一個學生,他在大學中不顯山不漏水,别的同學每天考慮着泡MM,他卻每天除了上課就是泡機房,是上也泡,下也泡,終于泡出了浏覽器。

    是以說,靜下心來,無論其他同學在多麼興奮的展示他們的某某系統,他們的某某網站,既然你選擇了學習C語言,那麼以韋青青青為榜樣吧,總有一天,你會一舉成名天下知的。

    2、不靜

    學習C語言,務必不可以急躁,務必一步一個腳印,此乃靜心。但是,學習C語言,也不可以太過沉默,一個人呆在機房裡閉門造車妄想着創造出某個絕世程式然後成為中國的比爾蓋茨是不可能的。

    學習靠自己,是以大部分時候我們需要自己思考、閉關修煉。但是一個人的力量終究是有限的,很多時候我們需要借助外力。比如不懂的地方咨詢老師,不明白的地方可以與同學互相讨論等等,都是可以的。

    有很多同學,學習時碰上困難,遇上了麻煩,于是自己冥思苦想--這是對的--還是得不到結果,于是故意回避不聞不問--這是自欺欺人。有同學說,那是因為無人可問,問老師,貌似大學老師總是神龍見頭不見尾,根本找不到;問網絡大蝦,網絡大蝦們經常不線上,就算線上,面對洋洋灑灑的留言也視而不見,更别提回複了;問同學,别提了太丢面子!大家同學而已,為什麼要問他,問他豈不是說明自己低人一等嗎,不問!

    其實,大學之中同學之間互相讨論是最可行的一種做法,畢竟一個王重陽沒有時間指點全真七子,網絡大蝦比投名狀中的兄弟還不可靠,是以除了自己多思考就是同學之間多讨論了。不要擔心問問題會低人一等,老祖宗有一句話叫做"不恥下問",雖然你的水準比我低上一點點,但是,我不覺得向不如自己的問提問是恥辱。多好的阿Q精神啊,用這點!

    隻有靜心,才可以更好的學到知識;隻有不靜心,才可以更快的學到知識。

    (二)深入不深

    1、深入

    學好C語言,就一定不能浮躁,要深入的學習知識。

    其實,以上的話就極其浮躁,極其不深入。誰不知道要深入學習啊,但是你的告訴大家,到底什麼内容屬于深入學習的内容。

    其實,浮躁就是學習知識就是浮于表面,沒有深入了解專業知識。表現在程式設計上就是隻想編寫一些所謂漂亮的、能夠拿得出手的程式,而對于一些底層的支援程式置之不理。

    有的同學喜歡編寫一些漂亮的程式,比如設計漂亮的網頁,使用某某工具開發某某'大型'系統等等,當然這都是人之常情。正如魯迅先生所說,文章寫出來總是希望擁有更多的讀者,除非是寫給戀人的。程式編出來,總是希望擁有更多使用者,除非是專門為夫妻開發的。但問題是,隻編寫這類程式是不夠的,是有缺陷的。

    這些所謂的程式,往往隻需要對知識應用,并不需要刨根究底研究知識的本身,甚至有很多加入了很多相當專業的内容,并不适合于初學者學習。比如VC中的MFC就是一個典型的誤導初學者的工具。利用MFC可以很友善的編寫出DIAG界面程式或者視圖文檔程式,從表面上看風光無限,但對初學者卻禍害無窮!假如使用VC學習C++,大部分時間将用于消息的處理,控件的處理,還要閱讀大量的視圖文檔結構類庫說明,這些操作将耗費了你大量的時間,得不償失。而且VC++的大部分程式設計是在某些位置插入代碼,至于C++部分系統自動實作了,留給你的是純C語言操作。同學請注意,你學習的是C++,不是VC類庫,也不是VC操作!

    比如使用資料結構,就必須自己編寫有關連結清單、隊列和棧等内容,你是在學習,又不是工作,當然得用自己編寫的東西呢。

    又比如說C語言的記憶體配置設定函數,就是那個malloc和free.一般人直接調用就行了,但是計算機專業的學生不應該止步于此,而應該思考這兩個函數的系統實作方法,并且程式設計式模拟記憶體配置設定和釋放。設計這樣的程式,不但可以增強動手能力,還可以加深對計算機知識的了解,一舉多得,何樂而不為。

    2、不深

    深入學習C語言是極其應該的,但是大家也必須有所側重,不能胡子眉毛一把抓,所有的東西統統深入,具體表現在兩個方面:

    其一、一些知識範圍不可過于深入。

    有一些知識,屬于偏僻的内容,既不是基礎,日後工作中也很難碰上,而且還極度困難,像這樣的東西,了解即可,完全沒有必要深入。比如說某同學心血來潮,要編寫一個漂亮的輸入法軟體,于是苦心學習了有關輸入法的所有知識,還妄圖氣死清華紫光,餓死搜狗拼音,于是仔細研究輸入法的犄角旮旯。其實這些知識均相當偏僻,了解即可,完全沒有必要打破沙鍋問到底。

    其二、一些界面或者不必要的功能不可過于深入。

    大家編寫的程式,往往伴随大量的互動式界面設計。事實上,程式設計有個二八原則,即編寫80%的核心内容将耗費你20%的時間,而另外20%的功能将耗費你80%的時間。實際上,作為C語言學習,深入編寫好那80%的核心功能就可以了,耗費80%的時間去深入完善那些20%的功能,得不償失!

    是以,練習用的程式,最好是一些基礎的、底層的實作,不要有太多花俏的圖像和互動式操作。當然也可以設計一些簡單的具備圖形界面的小遊戲,但此時你應該将精力更多注重于遊戲本身的設計,而不是遊戲的畫面風格和動畫效果上。

    學習C語言,有所為有所不為。

    (三)枯燥不枯

    1、枯燥

    學海無涯苦作舟,學習當然是一個枯燥的過程。用語言設計程式,表面上程式漂漂亮亮風光無限,其實風光的背後是黑漆漆的螢幕和冗長的代碼。程式員是把美麗獻給别人,把枯燥留給自己的職業。

     是以,學習C語言,就必須多設計一些枯燥的、無趣的執行個體。當flash程式員在展示圖檔時,C語言程式員要去學習空洞的0和1的圖檔格式;當Java程式員設計網站時,C程式員要去了解抽象的HTTP協定;當。net程式員使用對象托管時,C程式員總是要考慮記憶體的申請與釋放;當C++程式員在歡樂的使用STL庫時,C程式員必須自己搭建所有的資料結構。

    在C語言的學習路上,絕對沒有學習其他語言那麼多鮮花,這是每一個C語言愛好者必須接受的事實。

    2、不枯

    其實,人都是需要動力的,憑什麼别的程式員可以通過漂亮的程式享受MM的崇敬和同學的贊歎,而C語言程式員就隻能在0和1的世界中與電腦溝通。其實,學習C語言的過程完全可以是快樂的。

    大家在基礎内容了解的差不多時,完全可以循序漸進設計一些簡單的趣味遊戲程式,從貪吃蛇到俄羅斯方塊,從搞怪碰碰球到連連看,從掃雷到雷電,甚至還可以是植物大戰僵屍和憤怒的小鳥,編寫一些在界面上簡化的趣味遊戲程式來,同意可以激起自己的興趣并擷取老師、同學尤其是MM的陣陣掌聲。

    枯燥,是因為學習并非玩耍。不枯,是因為要像玩耍一樣的學習。

    四、四項注意

    (一)錯誤觀點:C語言低人一等

    由于C語言常常應用于一些伺服器程式,沒有漂亮的界面,在一些同學的心目中,C語言程式員就成了IT民工的代名詞。類似于煤礦勞工,整天生活在地底下。而那些Java程式員,.net程式員則成了白領麗人。

    (二)錯誤觀點:C語言高人一等

    與第一種情況相反,一部分同學則認為C語言才是語言正統。俗話說:真正的程式員用C,聰明的程式員用delphi.那麼其他的語言統統是神馬牌浮雲,不值一提。其他的程式員,無論聰明也好,愚蠢也罷,都是盜版水貨。

    (三)錯誤觀點:C語言是忠貞情人。

    弱水三千,隻取一瓢。有人在愛情上的忠貞,有人去在語言上忠貞,有人如斯内普般一生隻愛一個女人,有人欲效仿之,一生隻使用一種語言。

    正如人生而平等一樣,其實,語言也沒有高低貴賤之分,隻有适合于不适合之分。Java适合做WEB開發,C語言适合伺服器,C++适合做遊戲,等等。真正的程式員,不是隻使用C語言的人,而是到什麼山唱什麼歌。任何語言、任何資料庫、任何作業系統對他來說都隻是工具,呼之能來、來之能戰、戰之能勝、揮之能去。當JQuery友善時,我不直接用JavaScript;當速度優先時,我不用Java;當穩定優先時,我不用Windows.總之,倚天劍也好,屠龍刀也罷,統統是工具,為我所用,為我所奴役。

    (四)光說不練假把式

    學習C語言的真言是"編",但是也有同學會反駁,"這麼簡單的程式,也需要我親自編寫嗎?"、"這個程式我看一眼就知道怎麼做了"、"跳過這個程式,直接編寫後面的程式"、"不要把天才浪費在這種小程式上"等等之類的言論不絕于耳。

    上面其實就是典型的"眼高手低".

    大家在高中學習數學時常常有這樣的體會:一看就會,一做就錯。計算機程式設計其實也是一樣,咋一看簡簡單單,誰都可以說出個丁三卯四來,但是真正上一實戰,手也抖了,腰也彎了,腦袋也漿糊了。要麼半天寫不出一行代碼,要麼編譯就是報錯,怎麼查也查不出原因之所在。

  好了,以上就是關于學習C語言的秘訣,希望對正在C語言的同學有所幫助!

繼續閱讀