華文網

為什麼這麼多人學不會C語言?

很多人覺得用C語言作為入門語言覺得太難了,裡面還有指標,回檔,遞迴之類的操作太難了。為什麼這麼多人覺得C語言難?筆者根據從業十幾年的經驗嘗試著分析一下。

第一 C語言是距離硬體非常近的語言,特別是和記憶體關聯很近,主要還是指針的存在

很多人說到指標就頭大,指標就是一把雙刃劍,能夠很好的解決邏輯問題,但指標一旦出現問題,找個問題都很費勁,底層語言直接崩潰對應的查找工具還不多,很多還得靠代碼解決,

不像java用eclipse裝一些外掛程式,記憶體問題性能問題直接能看的比較清晰,這就是高階語言比較有優勢的地方,參與的人多遇到問題,去解決的人也多,對應的工具也多。解決記憶體和性能的問題,就難倒了很多意志不是堅定的人,很多人選擇換語言學習。

而且與指標相關聯的很多東西,在開始學的時候都不是很好理解,回呼函數,指標陣列,這些組合概念基本上沒幾下就把初學者給搞暈了,

這也是考驗耐性的時候,堅持去理解去學習,也就慢慢挺過去了,其實這些都是基本功能的組合,比如回呼函數應用的場景,函數的執行時機已經確定,函數內容實現要根據具體的場景來定,這種在windows程式設計時候在傳遞控制碼的時候用的多。要理解回檔還得知道函數指標是個啥概念,這種對初學者來說簡直就是天書。在學習的時候記住一點先去理解了再去考慮怎麼練習,
實踐。不要上來逮著書本上的練習題目呼呼的去敲代碼,要理解個差不多再去動手也不遲。

指標直接的導向就是容易導致記憶體洩漏,而且如果不是大塊的洩漏解決起來都特別費勁,可能需要運行很長一段時間才能查找到,指標的釋放位置自己要記錄好了,忘記了查找起來相當的麻煩。

第二 C語言工具比較少,很多功能的實現都需要自己實現

很多高階語言幾句話的事情,在C語言去實現需要折騰很長時間,這是底層語言不太好的地方,這也就決定了C語言只適合在性能要求比較高的地方去使用,應用方面就不怎麼適合了。目前來看在嵌入式領域用的還是比較多,特別是在內核驅動,

或者作業系統底層實現方面應用的非常廣泛,而且這類對於C語言的要求比較高,不是簡單寫個普通的模組就能搞定的事情。

查找個性能問題,基本上靠列印定位大的大致方向,採用代碼排除的辦法去解決,初學者最初可能都沒有這種感受,隨著做一些實際的項目也就慢慢有這種體會了。

第三 C語言 由於是面向過程的語言,原則上函數和模組之間可以胡亂調用,如果框架思想不強,寫出來的代碼就是一鍋粥,非常難維護

很多初學者用C語言實現一個功能,基本上都放在一個檔或者函數裡面,亂哄哄的代碼搞在一起,如果再用指針實現功能,代碼簡直沒法看,當然這是初學者的通病。

面向過程的代碼可以寫的非常亂也能正常的去執行,維護起來可就麻煩了,C++在這方面就做了很多的提升和限制,在編譯的時候加大了難度,然後在實際執行過程中就顯得遊刃有餘。

基於以上三點導致很多初學者倒在入門的路上,本質上堅持的力度不夠,誰都不可能在開始學的時候都弄得非常清楚,畢竟天才只有少數。學完之後回來總結C語言也就是十個左右的知識點,懂了也就比較輕鬆了,後續就是靠自己在項目中的打磨了。

如果框架思想不強,寫出來的代碼就是一鍋粥,非常難維護

很多初學者用C語言實現一個功能,基本上都放在一個檔或者函數裡面,亂哄哄的代碼搞在一起,如果再用指針實現功能,代碼簡直沒法看,當然這是初學者的通病。

面向過程的代碼可以寫的非常亂也能正常的去執行,維護起來可就麻煩了,C++在這方面就做了很多的提升和限制,在編譯的時候加大了難度,然後在實際執行過程中就顯得遊刃有餘。

基於以上三點導致很多初學者倒在入門的路上,本質上堅持的力度不夠,誰都不可能在開始學的時候都弄得非常清楚,畢竟天才只有少數。學完之後回來總結C語言也就是十個左右的知識點,懂了也就比較輕鬆了,後續就是靠自己在項目中的打磨了。