99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

如何學(xué)習(xí)C語言,C語言的知識框架

STM32嵌入式開發(fā) ? 來源:STM32嵌入式開發(fā) ? 2020-08-27 14:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

如果你不知道如何學(xué)習(xí)C語言,那么先看一下C語言的知識框架。

C語言是世界上最值得學(xué)習(xí)的語言

學(xué)習(xí)C語言之前,首先要明確地告訴自己,C語言是世界上好的語言。

如今決定學(xué)習(xí)任何一門其他語言之前,都要先考察這個語言有什么成功項目嗎?唯獨C語言沒有必要問,因為世界上所有最最重要的的系統(tǒng)中,都必然有C語言的身影。比如操作系統(tǒng)內(nèi)核、高級語言底層等等。

為什么C最適合擔(dān)任系統(tǒng)核心?主要原因可能是C語言具有和匯編語言的對應(yīng)性,一條C語言代碼,對有經(jīng)驗的人來說,可以轉(zhuǎn)換為一條或多條匯編代碼,也就是說編譯結(jié)果具有可預(yù)測性。C代碼不會在被編譯時被加上奇奇怪怪的修飾,也不會在二進(jìn)制兼容性方面帶來大問題。這種穩(wěn)穩(wěn)當(dāng)當(dāng)?shù)恼Z言,一切都在掌握之中,一切榮耀歸屬于coder,一切錯誤也歸罪于coder。

學(xué)習(xí)C語言的同時,就自然而然的理解了硬件與操作系統(tǒng)的淺表一層。比如int有幾個字節(jié)的問題,已經(jīng)是QQ加群驗證是否是程序員的一個標(biāo)準(zhǔn)了(笑),這從側(cè)面說明了學(xué)習(xí)C語言時確實會關(guān)心底層軟硬件的實現(xiàn)。C語言簡單的基于值類型的數(shù)據(jù)類型體系(引用靠指針,指針本身也是值類型),保持了和硬件底層的一致性(即內(nèi)存、緩存、寄存器只能保存值),不會出現(xiàn)其他語言比如C#那樣既有值又有引用反而對理解底層實現(xiàn)制造了障礙。

從某些角度上講,C語言從設(shè)計上來說并不是為了讓我們更好的寫邏輯代碼而設(shè)計的,它真的是“只能是這樣”,沒有對錯好壞之分。因為計算機體系結(jié)構(gòu)就是這樣的、匯編就是這樣的,所以C語言大致也只能是這樣的,誰也不能隨意捏造它。它足夠簡單,評論它的設(shè)計優(yōu)劣意義不大。

廢了這么多口舌,是為了堅定思想,端正態(tài)度,只有抱著“最好”的態(tài)度,才能排除雜念,勇往直前。時代在進(jìn)步,某些東西易逝,而另一些東西持久。很多編程大師都用親身經(jīng)歷告訴你,C語言永遠(yuǎn)值得用最純粹的態(tài)度去學(xué)習(xí)。

C語言的語言本身很容易“精通”,一旦你理解了指針、函數(shù)指針等問題,基本知識方面就橫行無阻了,很少會遇到完全沒見過的語法。

C語言基本學(xué)習(xí)過程真的沒有太多好講的,假設(shè)每天學(xué)習(xí)兩小時,每周學(xué)習(xí)5天,只要動手多寫例子,把例子保存好隨時翻看,那么C語言的語法基礎(chǔ)很快就能全部過完一遍,估計半個學(xué)期的時間就能看完。難點可能是在指針的使用,這需要多看資料、多畫圖、多寫代碼嘗試,給自己點時間強行突破即可。

但是問題也在這里,由于宏和指針的存在,萬事皆有可能。很多經(jīng)典的C代碼,真的是沒見過之前根本不知道還能這么用,舉個入門級的例子,Linux內(nèi)核中的一個通用鏈表:

// 定義鏈表節(jié)點結(jié)構(gòu)struct list_head{struct list_head *next, *prev;};// 創(chuàng)建鏈表#define LIST_HEAD_INIT(name) { &(name), &(name) }#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)// 判斷鏈表是否為空static inline int list_empty(const struct list_head *head){return head->next == head;}// 運行時初始化鏈表#define INIT_LIST_HEAD(ptr) do { (ptr)->next = (ptr); (ptr)->prev = (ptr); } while (0)// 我自己寫的測試函數(shù),方便讀者閱讀:int main(){LIST_HEAD(my_list_head);printf("列表是否為空 %d ", list_empty(&my_list_head));return 0;}

C語言寫的經(jīng)典代碼經(jīng)常會用這種“過度簡潔”的語法,初學(xué)之后會看得云里霧里的。如果你能看懂,又會有一個更大的問題——這個list_head結(jié)構(gòu)體里面,沒有數(shù)據(jù)。自定義數(shù)據(jù)應(yīng)該放在哪呢?這又需要深一步研究了。

稍微高深點的比如任意動態(tài)語言的源碼,比如Lua的源碼,對于剛學(xué)懂了C語言的同學(xué)來說,真是每個字都懂,連在一起就不認(rèn)識的感覺。還有一些經(jīng)典算法,比如Subversion的源碼,都很值得深入分析,只要理解一個模塊,就會收獲巨大。具體的例子這本書里提到好幾個:

賞析一下書中前幾個問題:

第1章 正則表達(dá)式匹配器

第2章 Subversion中的增量編輯器:像本體一樣的接口

第3章 我編寫過的最漂亮代碼

第4章 查找

可能是知識結(jié)構(gòu)不足,本書后面的例子我讀起來有點不清晰。對C語言學(xué)習(xí)者來說,前幾個例子非常值得一讀,可以迅速意識到自己的不足并迅速成長。本書建議先找電子版試讀。

關(guān)于C語言開發(fā)環(huán)境:

1、Windows平臺,請使用Dev-C++。不要用Visual Studio,對C語言支持不完整。

2、安裝Linux虛擬機,桌面版本的,比如Ubuntu,現(xiàn)在貌似“深度Linux”挺火,沒試過。

關(guān)于進(jìn)階

C語言的進(jìn)階會遇到兩個主要問題:

1、明白基礎(chǔ)以后,缺少大量練習(xí)。而大量練習(xí)本身會非常費時間,因為在顧及語法的同時要顧及邏輯問題,捉襟見肘。這時候的初學(xué)者,邏輯抽象能力和語法使用都是半吊子,非常難受。

2、閱讀代碼方面,C語言的成熟工程代碼一般會比較冗長,函數(shù)中間夾雜著很多宏和指針操作,我閱讀的感覺是讀后面忘前面,非常難入手。如果不明白某個函數(shù)的功能,強行將其讀懂非常費時費力,容易放棄。

這樣一來,學(xué)完基本知識之后的進(jìn)階之路真的非常陡峭。

我個人大膽給出C語言進(jìn)階的一個相對緩和的路線:

1、實現(xiàn)鏈表、可變長數(shù)組、哈希表等基本數(shù)據(jù)結(jié)構(gòu),實現(xiàn)方便的string結(jié)構(gòu)體。然后大膽的用在自己寫的程序中。不要怕寫的有BUG,也不要怕效率不高?,F(xiàn)代編程中容器是非常關(guān)鍵的武器,沒有容器寸步難行。而編寫容器時會練到封裝、指針、內(nèi)存分配,都是C語言進(jìn)階時極其重要的方面。

2、如果工作學(xué)習(xí)中用到C語言就再好不過,比如現(xiàn)在很多本科、碩士畢業(yè)論文都要用C語言實現(xiàn),那么這時候抓住機會多練練,是最好的。

3、嘗試ACM競賽題,ACM競賽和OnLineJudge平臺。類似有很多,北大、北郵這種大學(xué)都有類似的網(wǎng)站,上面不僅有題目,還有算法、有答案、有提示,還能直接在網(wǎng)頁上做題。刷題可以獲得及時反饋,一旦你AC了3道題,那種成就感可以讓你繼續(xù)下去,哈哈。不過除非你興趣就是算法本身,那么刷30道題基本就可以了,畢竟這種刷題會猛烈地提高算法能力,但是對架構(gòu)能力的提升幾乎沒有任何作用,對大多數(shù)人來說不建議刷太多。

4、非常重要的私貨:如果除了做練習(xí)題以外沒有練習(xí)機會,那么請把C語言放一下,快速學(xué)習(xí)Python(首選)、Lua(次選)、JavaScript(或TypeScript更好)等能夠立即實現(xiàn)功能效果的語言。學(xué)習(xí)好的動態(tài)語言有兩方面好處:

第一:表層來說,能迅速提高邏輯代碼的編寫能力。用C語言構(gòu)思半天才能寫一點的功能,用動態(tài)語言會快速的多,動態(tài)語言將我們從內(nèi)存分配、容器等基本問題中解脫出來,直接實現(xiàn)我們想要的效果。用動態(tài)語言實現(xiàn)之后,可以用C語言仿寫這些邏輯代碼,相當(dāng)于按圖索驥,直達(dá)目的。

第二:深層來說,較高級的語言對底層的語言編寫有強烈的指導(dǎo)意義。我個人在工作中使用C++用了很長時間,但是總感覺遇到瓶頸無法突破。直到我學(xué)習(xí)了Python,寫了一兩個比較復(fù)雜的工具,從另一個角度突破了邏輯設(shè)計的屏障,才感覺到編程水平有了明顯提高。

第三:在掌握了Lua或Python后,再找資料一邊學(xué)習(xí)一邊看Lua和Python的C源碼,對提高C語言水平有實質(zhì)性的幫助。

這里舉一個簡單的例題:一個文件中有很多對ID和字段,這些ID和字段對分別代表另一個文件。而另一個文件內(nèi)容可能會鏈接到更深一級的文件。怎樣讀取這些文件組成一棵樹呢?

這個問題對能力達(dá)到一定水平的人是基礎(chǔ)問題,而對于初學(xué)者來說可能是一個門檻。這種問題我的建議是用Python或Lua的表、字典來解決,然后理清思路之后,改寫為C代碼。

總結(jié)

寫了很多,感覺再寫下去個人私貨就太多了,并不客觀??傊瓹語言的學(xué)習(xí)是知識點少、難點多。上面針對初學(xué)提供了一些建議,進(jìn)階方面寫了很多個人的心得體會,希望能給學(xué)習(xí)C語言的初學(xué)者和進(jìn)階者提供一些幫助。如何學(xué)習(xí)C語言這是個挺重要的大問題,讀者若有意見和建議,可以討論交流,有問題我可以修正。

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

    關(guān)注

    7

    文章

    2788

    瀏覽量

    50342
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141611
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70681

原文標(biāo)題:如何學(xué)習(xí) C 語言?

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    C語言精彩編程百例-364頁

    大量經(jīng)驗,從而可以熟練地進(jìn)行C程序設(shè)計。 全文共分為四篇,全面、系統(tǒng)地講述了C語言各個方面的知識點和程序設(shè)計的基本方法,以及編寫程序過程中值得注意的地方,內(nèi)容深入淺出,通俗易懂。對于
    發(fā)表于 06-13 17:28

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

    C語言編程中,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復(fù)執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進(jìn)入無限循環(huán),C語言提供了多種循環(huán)控制語句,如break、continue和
    的頭像 發(fā)表于 04-29 18:49 ?1124次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環(huán)控制

    C語言的歷史及程序介紹

    電子發(fā)燒友網(wǎng)站提供《C語言的歷史及程序介紹.pdf》資料免費下載
    發(fā)表于 04-09 16:10 ?0次下載

    如何在 樹莓派 上編寫和運行 C 語言程序?

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

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

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

    AKI跨語言調(diào)用庫神助攻C/C++代碼遷移至HarmonyOS NEXT

    )開發(fā)框架。它極大地簡化了JS與C/C++之間的跨語言訪問,為開發(fā)者提供了一種邊界性編程體驗友好的解決方案。通過AKI,開發(fā)者可以使用讓代碼更易讀的語法糖,實現(xiàn)JS與
    發(fā)表于 01-02 17:08

    語言模型開發(fā)框架是什么

    語言模型開發(fā)框架是指用于訓(xùn)練、推理和部署大型語言模型的軟件工具和庫。下面,AI部落小編為您介紹大語言模型開發(fā)框架。
    的頭像 發(fā)表于 12-06 10:28 ?523次閱讀

    NPU支持的編程語言有哪些

    NPU(Neural Processing Unit)是一種專門為深度學(xué)習(xí)和人工智能應(yīng)用設(shè)計的處理器。NPU支持的編程語言通常與它所集成的平臺或框架緊密相關(guān)。以下是一些常見的編程語言
    的頭像 發(fā)表于 11-15 09:21 ?1911次閱讀

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

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

    C語言C++中結(jié)構(gòu)體的區(qū)別

    同樣是結(jié)構(gòu)體,看看在C語言C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?763次閱讀

    C語言與Java語言的對比

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

    C語言與其他編程語言的比較

    C語言作為一種歷史悠久的編程語言,自其誕生以來,一直在軟件開發(fā)領(lǐng)域扮演著重要角色。它以其高效、靈活和可移植性強的特點,成為了系統(tǒng)級編程的首選語言之一。
    的頭像 發(fā)表于 10-29 17:30 ?1070次閱讀

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

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

    技術(shù)干貨驛站 ▏深入理解C語言:掌握程序結(jié)構(gòu)知識

    在計算機編程的世界中,C語言被廣泛認(rèn)可為一門強大而高效的編程語言,其簡潔的語法和直接的指令使得它成為了許多程序員的首選。了解C語言的程序結(jié)構(gòu)
    的頭像 發(fā)表于 07-27 08:45 ?1851次閱讀
    技術(shù)干貨驛站 ▏深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:掌握程序結(jié)構(gòu)<b class='flag-5'>知識</b>

    C++語言基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《C++語言基礎(chǔ)知識.pdf》資料免費下載
    發(fā)表于 07-19 10:58 ?10次下載