很多初學C語言的小伙伴革砸,在學習之初并沒有一個大概的概念除秀,學習這門語言需要掌握多少知識點,怎么才算學的差不多算利?
C語言的精髓點在哪册踩? 學到多少東西才能夠達到做項目的標準?學習的時候需要注意哪些細節(jié)點效拭?疑問太多以至于壓得自己喘不過氣來暂吉。小編從項目的角度分析C語言到底需要掌握哪些知識,為什么要去掌握這些點缎患,怎么去掌握慕的,在此嘗試著總結(jié)以下幾點,未必都是對的挤渔,起碼可以做到親身經(jīng)歷业稼。
基本的數(shù)據(jù)操作,運算規(guī)則蚂蕴,常見程序結(jié)構(gòu)設(shè)計
很多人覺得這么幾點我都看了多少遍了,早就爛熟于心了俯邓。舉個簡單的例子骡楼,printf打印可能是最常使用的函數(shù)了,但是這個函數(shù)在真正大型工程中稽鞭,很少直接去調(diào)用鸟整,為什么?
主要項目中涉及到封裝的概念朦蕴,什么時機加入打印在調(diào)試大型系統(tǒng)的時候篮条,更容易定位問題弟头,這些編程思維對于初學者來說很難接觸到,也很難想到涉茧,任何復雜的事物都是由簡單的細節(jié)環(huán)繞而成赴恨,在學習之初不要覺得這些很簡單的數(shù)據(jù)操作很簡單,要真正納入自己的知識體系還是需要花點心思伴栓÷琢可以在學習的時候钳垮,網(wǎng)上搜一些資料看這些數(shù)據(jù)操作以及運算規(guī)則是如何使用具體的場景中惑淳。
很多人初學者可能會有疑問覺得去哪里找這些代碼去,世界軟件發(fā)展了這么多年饺窿,最不缺的就是代碼,在github或者開源中國里面代碼多如牛毛。學習的對象也是數(shù)不勝數(shù)。有點扯遠了,這觸及到另外一個學習編程的步驟,學會看懂別人的代碼落追,然后才能嘗試寫出優(yōu)質(zhì)的代碼轿钠,知己知彼百戰(zhàn)不殆贷腕。曾經(jīng)聽一個編碼高手說過“技術(shù)這東西只要花的時間長胸囱,肯下功夫早晚都能搞定妹卿,只要進入狀態(tài)了,什么方法都能想的出來”铺纽,看書學習也罷凤跑,看視頻學習也罷,需要讓自己插上聯(lián)想的翅膀呜笑,把自己的思維境界打開曹抬。
說到運算規(guī)則,涉及到代碼的格式的問題为牍,說說身邊人的事情抖韩,去年招了一個剛畢業(yè)的學生,基本功不是很好属桦,但是有一個特質(zhì)專注力很高亏吝,能沉得住氣止喷。當初見第一眼就覺得是個做軟件的苗子,有了第一印象后面的事情就順理成章了植康。很多經(jīng)驗不是很足的同學吕嘀,參加面試回答的問題也不是很理想赞季,但還是被錄取了,其中一個因素就是你身上有公司需要的基因淑倾,這多少算來有點運氣的成分在里面了。今年這哥們覺得很突然,說為啥當初剛開始寫代碼的時候為啥不要求那么嚴格,說了幾句話,初學者特別是基礎(chǔ)很差的情況下粗恢,要求太多只會讓一個人慢慢失去對這個行業(yè)的信心席镀,也許會錯失一個軟件天才匹中。隨著時間推移能夠邁入軌道了,那么就該要求一些基本的職業(yè)素養(yǎng)了豪诲,代碼的格式顶捷,就該要求了。很多初學者覺得寫的代碼越高深屎篱,越讓人看不懂才叫高手服赎,有這種想法的趁早打住。大道至簡交播,這四個字在任何時候都不過時重虑。做的復雜邏輯混亂只能說明當初在設(shè)計的時候,沒有徹底想明白堪侯,想明白了展示出來一般都比較舒坦平整嚎尤。
指針,數(shù)組伍宦,結(jié)構(gòu)體芽死,枚舉靈活運用
不要只看這幾個字,幾乎是C語言里面最精髓的代表次洼。數(shù)組這個概念基本上還能理解透徹关贵,說到指針這個應用場景太多,而且在什么項目中幾乎都離不開指針的使用卖毁。變化無窮揖曾,會用的覺得其樂無窮,不懂的哭上天亥啦。記得在互聯(lián)網(wǎng)有個流傳很長時間的文章炭剪,林銳的我的大學十年(有興趣的同學可以去網(wǎng)上查閱,編程的人生也可以很彪悍翔脱,記得當初發(fā)燒期間還專門買了林銳的一本高質(zhì)量編程)提到了做了一個C語言的項目奴拦,為了繞開指針最后全部用數(shù)組代替實現(xiàn)了,后來做的項目也黃了届吁。不是說因為用數(shù)組使用就不行错妖,項目的定位方向出問題了绿鸣。用數(shù)組完全替代指針這條路也是可行的,但是會花費相當大的周折暂氯。
說到指針潮模,不能不提到計算機專業(yè)開的另外一個課程,數(shù)據(jù)結(jié)構(gòu)痴施。數(shù)據(jù)結(jié)構(gòu)就是原生數(shù)據(jù)或者組合數(shù)據(jù)的混合運用的一種規(guī)則集合擎厢。連接這些數(shù)據(jù),將這些數(shù)據(jù)有機的串聯(lián)在一起辣吃,指針起到非常關(guān)鍵的作用锉矢。經(jīng)常見到初學者說數(shù)據(jù)結(jié)構(gòu)和天書差不多,幾乎看不懂齿尽,建議回爐好好學習指針,說到指針還是存在很多故事灯节,在入門之初有幸遇到一位水平極高的老手帶著循头,基本功扎實的不得了,記得有一次使用指針忘記初始化炎疆,這老手嘆了口氣卡骂,當年我每次用指針錯一次,就被項目經(jīng)理當眾批評一次形入,后來再也不敢不初始化使用了全跨,所以印象才能這么深刻,話說到這里剛?cè)腴T的小白挨多少批評或者鄙視亿遂,是最正常不過的事情了浓若,這對于編程界來說稀松平常。
結(jié)構(gòu)體在項目中用的特別多蛇数,很多初學者覺得結(jié)構(gòu)體都在教材的最后章節(jié)挪钓,覺得不是那么重要。其實結(jié)構(gòu)體在一定層次上決定著軟件的脈絡(luò)框架耳舅。很多高手在設(shè)計模塊的時候碌上,不是急急忙忙的寫代碼,而是先把頭文件里面的結(jié)構(gòu)體設(shè)計出來浦徊,簡單的來說就是把數(shù)據(jù)模型先搞起來馏予。有個數(shù)據(jù)模型代碼實現(xiàn)起來就比較輕松了。面向?qū)ο罄锩骖惖睦献孀诰褪墙Y(jié)構(gòu)體延伸來的盔性。關(guān)于結(jié)構(gòu)體如何賦值霞丧,包含著指針的情況下,如何賦值這些都是常見的初學者經(jīng)常容易掉的坑纯出。枚舉一般用在羅列不同類別蚯妇,存在多個相同功能的實物敷燎,搭配switch使用的很多,在這就不一一列舉了箩言。
函數(shù)的使用
函數(shù)是面向過程編程最基本的單位硬贯,任何C程序的運行都有函數(shù)的身影隐圾,因為程序的入口main就是一個函數(shù)届案,函數(shù)傳值方式,調(diào)用方式(遞歸毕贼,回調(diào))都是函數(shù)內(nèi)在的表現(xiàn)务漩。函數(shù)的里面又可以嵌套別的函數(shù)拄衰,使得程序慢慢變得復雜化。前幾天和一個非計算機專業(yè)的聊天饵骨,談到如何學習函數(shù)翘悉,說到了數(shù)學不好是不是編程不好學。函數(shù)的編程基本因子居触,和數(shù)學里面的函數(shù)有一定的共性妖混,但編程里面的含義引申的層次更多,數(shù)學在一定層面就是提供一個工具或者方法而已轮洋,函數(shù)的設(shè)計里面夾雜著諸多的編程思想制市。
檢驗一個程序員水平的高低可以簡單讓用函數(shù)實現(xiàn)一個相對復雜一些的功能,基本上就能看出編程思想掌握的深淺程度弊予。不妨自己實現(xiàn)一個函數(shù)祥楣,檢驗下自己編程水準,函數(shù)的檢驗是面試里面必不可少的題目汉柒。
一個函數(shù)基本上代表一個小的模塊误褪,多個模塊有機的組合形成一個系統(tǒng)。建議初學者在學習函數(shù)的時候碾褂,不要滿足于會使用函數(shù)振坚,還要讓自己站的層次更高一點。這能決定自己是一個純粹的執(zhí)行者還是未來框架的設(shè)計者斋扰,不要覺得這些東西距離自己很遠渡八,慢慢的積累時間長了,慢慢也就從量變變成質(zhì)變了传货。
對于內(nèi)存和性能有少許的理解
內(nèi)存和性能對于初學者來說屎鳍,可能覺得很遙遠,其實這兩樣東西貫穿整個編碼界问裕,檢驗軟件功能最重要的兩項指標逮壁,軟件占用內(nèi)存多少,運行時間長了會不會讓系統(tǒng)變緩慢粮宛。同時開啟在多個軟件的時候窥淆,你設(shè)計的軟件是不是變得很卡頓卖宠,這些都是大家平常在使用軟件時候經(jīng)常遇見的現(xiàn)象。今天在車上閑聊忧饭,司機說當年的XP運行的多好扛伍,非要升級搞什么windows7或者windows10之類的,把電腦搞的卡的要死词裤。這其實是微軟操作系統(tǒng)設(shè)計理念的一個延伸刺洒,用空間換時間。說的通俗點吼砂,提前把一些常見的軟件加載到內(nèi)存里面逆航,使用的時候流暢度會感覺好一些,理念這么好渔肩,為啥還變得這么卡慢因俐,主要機器配置太低了。微軟這幫大佬認為你機器內(nèi)存和CPU還是相當不錯的周偎,因為現(xiàn)在硬件成本基本上接近白菜價了女揭。在機器配置還不錯的情況下,windows7栏饮,10運行的速度還是很不錯的。透過這些生活常識磷仰,歸結(jié)對編程袍嬉,對編碼的認知程度上,慢慢就會建立起自己的知識體系灶平。
這點在嵌入式設(shè)備上表現(xiàn)的很明顯伺通,一般嵌入式設(shè)備內(nèi)存和cpu配置不是高,內(nèi)存就要省著點用逢享,占用CPU很高的一些函數(shù)盡量少去調(diào)用罐监,避開雷區(qū),這些經(jīng)驗就要靠平時多去積累瞒爬,多去思考弓柱,才會融入自己知識體系,才會慢慢認識到寫代碼其實在編程時候侧但,只占很小的一部分矢空,大部分的時間還是在思考如何讓代碼更加利索,內(nèi)存更少的去使用禀横,cpu占用率低一些屁药。認識到這些時候,層次就不一樣了柏锄,就會越來越覺得設(shè)計思想的重要性了酿箭。
嘮嘮叨叨說了以上四點复亏,可能和里面具體的概念不是很搭邊,主要站在項目的角度上做了一些延伸缭嫡,從項目的角度去認識一些基本的概念缔御,讓初學者在學習的時候,有個大致的認識械巡。在知識層次上面稍微做了一些拉伸刹淌。稍微上了一點高度,滲入了一些編程思想讥耗。希望初學者對此有一個更加深刻一點的認識有勾,不要拘泥于語法的限制,編程語言服務(wù)于編程思想古程。學到了真正的編程思想蔼卡,才叫貨真價實的懂編程。