c語言練手
A. 如何學習c語言
如果剛開始接觸c語言,聽不懂也正常,不要有畏懼的心理,有些小夥伴可能看到部分同學什麼都會,自己就很氣餒,因為這部分同學很可能接觸編程比較早,即使小孩學走路也有一個過程,剛開始有走路慾望->學會站立,腿部有力量->嘗試走路,不斷練習->學會走路。所以不要慌。
學C語言與走路一樣,剛開始一定要有學習的慾望,然後,再制定計劃,不斷練習,量變會引起質變,堅持下去就發現原來這么簡單。
歡迎關注公眾號:c語言與cpp編程,關注後,回復「加群『』進微信學習交流群
1、學習資料
書本推薦:《cprimerplus》難得的好書。老譚的書可看可不看,但是這本藍皮的cprimerplus是我案頭必備的參考書,後面還有完整的c99標准庫,所以適合當個參考書。注意區分一下《c++primer》和《cprimerplus》
如果覺得這幾本書還是有點難,那就先看《C語言程序設計》
有了經驗後要去看看,例子很經典。後來進階可以看看三劍客《c和指針》《c陷阱與缺陷》《c專家編程》
剛學C語言的話可以結合看下C語言編程經典100例;
編譯器:VS,DevC++,VC++,CodeBlocks,C-Free,TurboC。關於它們的特點網上介紹很多了,就不贅述了。講真,入門和基礎階段你用哪個無所謂,還是選自己喜歡的,不過對於初學者我們推薦DevC++。可能現在大學課堂用的還是VC++,剛入門自己習慣就行。
視頻推薦:有同學曾經說過,視頻這么好,上課就不用聽講了,這個是完全錯誤的,視頻是課堂補充,上課還是一定要好好聽講的,視頻可以查缺補漏,系統的學習一下。
上面提到的一些資料整理好了,可以下載:
鏈接:
提取碼:1234
學習方法:
1、過:學習一門新的語言,第一步就是把它所涉及的基礎知識大體過一點,不求深解,只求了解——第一遍:無需了解太過深入的理論,大體知道這門語言是什麼樣的,主要面向哪些場合,一些基本的語法格式是什麼樣的就可以了。
2、抄代碼:剛開始寫代碼,沒有多少人一上來就能立刻自己寫一個很完善很強大的代碼,甚至連基本的語法都會寫錯,這時候抄代碼就很關鍵了,從書上抄,從例子里抄,邊抄邊想,邊想邊回憶語法。
3、模仿改:自己會抄寫一些簡單的代碼,熟悉了一遍此語言的簡單語法後,但還不太清楚怎樣下手寫一個完整的代碼模塊,所以這一步要仿寫了,仿照給出的代碼寫一個屬於自己的代碼
4、勤調試:沒有人能一下子寫出完全正確的代碼,自己試著寫一些代碼,通過不斷調試來驗證自己的一些想法,繼續思考,再次驗證,來回折騰。熟悉一些基本的調試工具以及調試方法。
5、看n遍:出錯或遇到問題時,將代碼從頭看到尾,看了一遍又一遍,直到快全部記住時,總能找出問題原因,相信方法總會比問題多
6、練重復2-5步三遍以上,不解釋。
7、創新拿出一個完全沒有寫過的代碼,根據要求,一步步的寫出來。如果寫不出來,或者中間一堆錯誤,請參考第六步。
8、悟:主動找到寫代碼的感覺和成就感,並保持下去,世界上最難的語言就掌握了,將成為你軟體生涯永遠的工具。
B. 如何學習c語言
其實說到精通兩個兩個字,其實作為一個做了多年的老程序員,一般不敢提及這兩字,要精通一門語言相當的難,所以在簡歷上一般看到精通某種語言的描述,總會找點犄角旮旯的問題考驗下,不是內心的有多變態,而是覺得不能褻瀆精通兩個字,如果水平真不是到那種深不可測的程度,輕易不要喊出,作為程序員還是老實本分點好,也問過一些做了十幾年的老程序員,也會類似的感覺。
今天要說的其實是如何學好C語言,如何在自己基礎還不是很牢靠的基礎上,進一步去學習提升自己。還有很多不是計算機專業的想學習C語言,該做哪些准備,在這嘗試著給大家分析下。
一. 先具備一定的計算機基礎,為後續提升做好准備
是科班出身的直接學習C語言,算是駕輕就熟,相對來說障礙少一些。不是計算機專業的上來基本的機制轉化都成問題,到後來學習指針等比較難懂的技術點,一些基礎環節的缺失該暴露了,舉個簡單的例子:移位運算,如果不懂的十進制轉到到二進制,高八位,低八位的規則,沒點基礎很難搞明白。這也就是為什麼很多非計算機專業的想學編程一直給推薦計算機組成原理的原因。
對於計算機專業的,就可以直接起步學習C語言,需要選擇一本比較不錯的書,目前口碑不錯的書也不錯,沒必要全部買了去學習,第一次學習弄一本書就夠了,在這推薦C程序設計語言,C primer plus,這兩本書曾經在入門的時候用過。覺得還不錯。
二. 都准備好了,如何去學,學習過程應該講究什麼策略?
有了一定的基礎了,書本也准備好了,肯定有人會說,用跟著視頻學習也很不錯啊。視頻學習簡單明了,而且裡面的老師講的也比較清晰,為啥還要選擇以書本為主。很多人都喜歡看武俠電視劇,看過原著的人再去看拍的電視劇總會覺得缺少點什麼,視頻是對知識的高度提煉和濃縮的過程,所以看起來非常簡單直接,看似比較容易去學。經過語言的加工提煉,讓人一聽就明白,但是這個加工提煉的過程不是學習編程的人自己搞的。
學習編程本質上就是建立自己知識體系的過程,建立過程就需要一個提升思維認知的過程,書本上的東西比較抽象,看起來更加讓自己的大腦有遐想的空間,更加容易讓自己去動腦。在這強調一點不是說看視頻學習不對,可以選擇性的來看。以書本為基礎,遇到實在不懂的點,找到對應的知識點去看看視頻學習一下,然後再去回歸書本。在這個過程中很多人覺得我看視頻都聽得非常明白,但是離開視頻讓我寫怎麼也寫不出來。原因是聽明白和實踐明白是兩碼事,多練才是硬道理。
三. 掌握常見的幾個大知識點
數據類型,數組,函數,指針,結構體,預處理,文件等幾大塊。真正難點集中在函數,指針,預處理看起來不是很難,在很多大型軟體底層從效率考慮很多函數的實現直接採用宏的方式,對於初學者就不要考慮那麼多。
指針是整個C語言的核心,回調函數,以及數據結構都是圍繞指針展開。數據結構很多都是專門的一本書拿出來作為重點去學,本質上就是指針和結構體的搭配組合,形成各種數據結構,二叉樹,樹,鏈表等等。
對於指針的了解,指針就是一個變數,只不過這個變數和普通的變數有點差異存放的是地址,這個地址會指向一個內存區域,這個區域可以存放任何的數值,也可以繼續存放地址,二級指針就是這么來的,指針在使用之前一定要初始化,初始化本質上就是給這個指針尋找一個真實的存在的內存區域。說起來挺簡單,但是在實際使用過程中,初學者往往會產生各種錯誤,這也屬於正常。開始挖坑,然後慢慢填坑,直到弄明白是啥意思,這個期間可能會比較痛苦,挺過來再去看其實也沒那麼難。
學的過程遇到瓶頸可以找對應的視頻看看,也可以留言說出你的困惑,知識點也就那就那幾個,弄一個少一個。總會結束的時候。
掌握大致的知識點之後,可以找一些小的項目練手,比如貪吃蛇,俄羅斯方塊等游戲,代碼量相對比較小,但也能從側面提升編碼能力和對知識的認知程度。
四. 如何深層次的提升
用C語言做項目難點主要包含三點,查找內存泄漏,提升系統性能,搭建框架也合理。
由於C語言的指針使用的時候就需要初始化,基本上附帶著需要申請內存,如果內存不及時釋放,不停的申請就會造成內存泄漏。查找內存泄漏需要自己去寫鉤子函數抓住有多少人去申請了內存,然後抓住釋放函數,抓取數據然後根據指針的地址做比較,看看有沒有隻是申請內存,但是沒有釋放的地址,抓出來了找到對應的代碼直接修改掉。
系統性能解決整體上有兩種策略,重新審視代碼邏輯,通過debug或者加列印的方式,一點點排除,做這種工作比較乏味而且還需要具體整體的把握能力,有一種對代碼的直覺包含在裡面。
搭建框架這個要求更高了,設計模塊的框架整體來說都是遵循高內聚,低耦合策略。但是實際在開發過程中,可能為了方便直接就來回調用的很多。算是軟體開發的非常高的境界了。
這部分說的內容可能對於初學者來說,感覺還是比較遙遠,基本上算是編程老手做的事情。都會有從小白到高手的過程,也不要覺得現在水平很差就覺得自己沒有希望了,都是需要一個過程。千里之行始於足下。
作為初學者可以審視下自己現在學習到哪個階段了,差距還有多遠,要走的路還有多少。知己知彼百戰不殆。