色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何學習C語言,C語言的知識框架

STM32嵌入式開發 ? 來源:STM32嵌入式開發 ? 2020-08-27 14:09 ? 次閱讀

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

C語言是世界上最值得學習的語言

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

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

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

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

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

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

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

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

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

// 定義鏈表節點結構struct list_head{struct list_head *next, *prev;};// 創建鏈表#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)// 我自己寫的測試函數,方便讀者閱讀:int main(){LIST_HEAD(my_list_head);printf("列表是否為空 %d ", list_empty(&my_list_head));return 0;}

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

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

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

第1章 正則表達式匹配器

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

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

第4章 查找

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

關于C語言開發環境:

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

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

關于進階

C語言的進階會遇到兩個主要問題:

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

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

這樣一來,學完基本知識之后的進階之路真的非常陡峭。

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

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

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

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

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

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

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

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

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

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

總結

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2702

    瀏覽量

    47456
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136767
  • 代碼
    +關注

    關注

    30

    文章

    4786

    瀏覽量

    68563

原文標題:如何學習 C 語言?

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

收藏 人收藏

    評論

    相關推薦

    語言模型開發框架是什么

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

    NPU支持的編程語言有哪些

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

    C語言指針學習筆記

    本文從底層內存分析,徹底讓讀者明白C語言指針的本質。
    的頭像 發表于 11-05 17:40 ?235次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>指針<b class='flag-5'>學習</b>筆記

    C語言與Java語言的對比

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

    C語言關鍵字--typedef

    C語言關鍵字使用方法學習指南!
    的頭像 發表于 10-07 12:44 ?253次閱讀

    C++語言基礎知識

    電子發燒友網站提供《C++語言基礎知識.pdf》資料免費下載
    發表于 07-19 10:58 ?7次下載

    按照這樣學習C語言,成為卷王不是夢!

    在計算機編程領域,C語言被譽為一種強大而靈活的編程語言,掌握好C語言不僅可以讓你輕松駕馭各種編程任務,還能夠為你的職業生涯打下堅實的基礎。但
    的頭像 發表于 07-06 08:04 ?315次閱讀
    按照這樣<b class='flag-5'>學習</b><b class='flag-5'>C</b><b class='flag-5'>語言</b>,成為卷王不是夢!

    PLC編程語言C語言的區別

    在工業自動化和計算機編程領域中,PLC(可編程邏輯控制器)編程語言C語言各自扮演著重要的角色。盡管兩者都是編程語言,但它們在多個方面存在顯著的區別。本文將從多個維度深入探討PLC編程
    的頭像 發表于 06-14 17:11 ?2811次閱讀

    如何成為一名嵌入式C語言高手?

    相關教材、參加在線課程或者參考編程書籍來系統地學習C語言的基礎知識,并通過編寫簡單的程序進行實踐。 二、深入了解嵌入式系統的硬件架構和工作原理嵌入式系統通常包含微控制器或微處理器等硬件
    發表于 04-07 16:03

    如何成為一名嵌入式C語言高手?

    相關教材、參加在線課程或者參考編程書籍來系統地學習C語言的基礎知識,并通過編寫簡單的程序進行實踐。 二、深入了解嵌入式系統的硬件架構和工作原理嵌入式系統通常包含微控制器或微處理器等硬件
    發表于 03-25 14:12

    C語言基礎-為什么要使用C

    當今最流行的 Linux 操作系統和 RDBMS(Relational Database Management System:關系數據庫管理系統) MySQL 都是使用 C 語言編寫的。
    發表于 03-25 11:20 ?439次閱讀

    C語言#define的應用

    C/C++ 編程語言中,當程序被編譯時,被發送到編譯器,編譯器將程序轉換為機器語言,然后完成編譯并執行該程序。預處理器也稱為宏預處理器。
    發表于 03-06 11:29 ?376次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>#define的應用

    plc編程語言c語言的聯系 c語言和PLC有什么區別

    PLC編程語言C語言的聯系 PLC(可編程邏輯控制器)是一種針對自動化控制系統的特殊計算機。PLC編程語言是為了控制和管理自動化生產過程中的各種設備而設計的。與之相比,
    的頭像 發表于 02-05 14:21 ?4110次閱讀

    c語言,c++,java,python區別

    操作系統、嵌入式系統等對性能要求較高的場景。C語言的語法相對簡單,學習曲線較平緩,也是學習其他高級語言的入門
    的頭像 發表于 02-05 14:11 ?2384次閱讀

    vb語言c++語言的區別

    VB語言C++語言是兩種不同的編程語言,雖然它們都屬于高級編程語言,但在設計和用途上有很多區別。下面將詳細比較VB
    的頭像 發表于 02-01 10:20 ?2291次閱讀
    主站蜘蛛池模板: 亚洲午夜久久影院| 国产偷国产偷亚洲高清app| 亚洲AV久久无码精品蜜桃| 领导边摸边吃奶边做爽在线观看| 钉钉女老师| 99热6精品视频6| 一级做a爰片久久毛片苍井优| 四房播播开心色播| 男人插曲女人身体视频| 国产专区_爽死777| 国产360激情盗摄全集| 98久久人妻少妇激情啪啪| 亚洲乱码一区二区三区香蕉| 色婷婷激婷婷深爱五月小蛇| 蜜臀亚洲AV永久无码精品老司机| 狠狠色狠狠色综合曰曰| 国产精品久久人妻拍拍水牛影视 | 成人免费小视频| 91看片淫黄大片.在线天堂| 亚洲中文 字幕 国产 综合| 午夜福利32集云播| 日韩午夜中文字幕电影| 亲嘴扒胸摸屁股视频免费网站 | 亚洲一品AV片观看五月色婷婷| 丝瓜涩涩屋黄瓜香蕉丝瓜| 秋霞电影网午夜鲁丝片无码| 美丽的姑娘BD在线观看| 久久热这里面只有精品| 娇妻归来在线观看免费完整版电影| 国产精品永久AV无码视频| 冈本视频黄页正版| 成人中文字幕在线观看| 凹凸精品视频分类视频| gogogo在线观看| 99久久久免费精品免费| 91嫩草私人成人亚洲影院| 2021国产精品视频一区| 2224x最新网站| 99亚洲精品自拍AV成人软件| FREE另类老女人| xxx暴力xxx|