• <center id="q6uyy"><td id="q6uyy"></td></center>
    <dd id="q6uyy"></dd>
  • 推廣 熱搜: csgo  vue  angelababy  2023  gps  新車  htc  落地  app  p2p 

    如何系統學習 C 語言?

       2023-08-30 網絡整理佚名1280
    核心提示:語言本身只包含了編程語言最基本的語法,比如變量、if、else、for、while、枚舉、結構體等,外加一個指針。一句話,翁凱老師是真的想把計算機內部原理、編程語言以深入淺出的方式教給大家。語言,更多在于是否擁有扎實的計算機結構、存儲、運算原理方面的知識。語言的同時去了解一下補碼、數的二進制表示、內存、匯編等知識,尤其是內存和匯編,這兩個對于深刻理解指針和熟練運用有很大的幫助。

    大家好,我是小北。

    熟悉的小可愛們都知道,我之前發表過很多關于學習路線的文章,有的有的,還有很多同學催了我好幾次,我來說說如何學習C語言吧。

    不,鴿王來了。

    我們再說一遍,強調一下C語言的重要性:

    1.一圖勝千言

    如果你不想讀多余的文字,就看我畫的這張思維導圖:

    2、C語言是不是易學難掌握?

    很多學生反映C語言很難。

    事實上,與C++、Java等更現代的語言相比,C語言本身的語法特征很少,不像C++那樣成了大雜燴。

    C語言本身只包含了編程語言最基本的語法,比如變量、if、else、for、while、枚舉、結構體等,再加上指針。

    但為什么大家都覺得困難呢?

    說一下我大一時覺得困難的原因。 主要有兩點:

    1. 庫太少,太原始

    用C語言寫一個稍微復雜的項目,首先需要實現數據結構和常用算法,更不用說字符串的序列化了。

    例如Redis中的SDS、LIST、ZSET、HASH等。

    這對于新手來說其實是極其不友好的。

    想做點有趣的事,來吧,先寫一個鏈表?

    不過Java中直接新建一個效率不太高。

    后來學了才知道,這就是編程的高級形式。 寫個爬蟲直接xx,三言兩語就搞定了。

    在C語言中,需要裸露地編寫和發送網絡包、解析HTTP協議、序列化JSON、處理HTTPS(當然也可以導入庫,但是因為C/C++弱雞相當于沒有包管理)也相當麻煩。

    這就是學習C的新手很容易被解雇的原因。 他們做不出好玩的東西,都是一堆黑框。

    2.內存、指針

    另外,指針常常是令C語言初學者頭疼的問題。

    其實指針本身并不難,它就是變量的地址。

    但問題是地址是什么?

    要理解地址,就需要理解內存,但是由于大部分同學都是大一學C語言的,當時并沒有計算機基礎知識,所以理解起來其實有點困難。

    內存,其實很簡單,你只要把它當作一個黑盒子,提供讀寫的能力即可。

    就像快遞柜一樣,它提供了存儲和放置東西的能力:

    在哪里讀 在哪里寫

    當然,地址是必須的。 地址與快遞柜上的編號相同,快遞柜的網格是相對于內存中實際存儲的內容而言的。

    記住這個快遞柜的照片,其實指針你就明白了。

    什么是輔助指針?

    也就是將另一個格子的編號放到快遞柜的格子里,對應的是C語言。 例如:

    int?a?=?10;
    int?*pa?=?&a;
    int?**ppa?=?&pa;

    ppa指向的內存中存儲的內容是pa的地址,pa中存儲的是a的地址(我不會畫圖,只是打定主意

    那你就要問了,指針和二級指針、更多級指針有什么區別呢?

    為什么輔助指針需要兩個**?

    很簡單,如果不需要兩個**,怎么告訴編譯器這個地方其實是另一塊內存的地址呢?

    這樣編譯器就可以做語法檢查,不然誰知道你放的是變量的地址還是另一個指針的地址。

    更詳細的內容,其實我在這篇指針文章里講過:

    但現在從我的角度來看,我感覺指針很簡單,似乎很容易理解,也許這就是知識詛咒的原因。

    知識的詛咒:一旦我們自己知道某件事,我們就很難想象不知道它會是什么樣子。

    后來接觸了Java,就像發現了一個新世界。

    在C語言中,當你申請一塊內存的時候,你要記得隨時在合適的地方釋放它。

    發布不當? 抱歉隨時等你。

    忘記釋放? 抱歉,內存泄漏正在等你~

    亂寫指針? 抱歉,內存越界在等你~

    堆棧內存越界? VS下,火辣辣等你來~

    這些事情對于每個C來說一定是司空見慣的。

    在 Java 等更高級的語言中,只需創建一個新語言即可。

    好了,廢話結束了,下面是系統學習C語言的方法:

    第一階段:初學者少看書,多看視頻

    這實在是一個血淚的教訓。 大一的時候就傻傻的看課本,然后做課本后面的編程練習。

    很難學。 我們都知道,教科書為了保持其嚴謹性和全面性,往往有一個特點,那就是“不講人類語言”。

    對于C語言來說,初學者有一個難以克服的困難,那就是很容易遇到各種編譯和鏈接錯誤,而且不知道如何解決:

    比如這種很基礎的報錯,但是初學者看到它往往會驚慌失措。

    在這種情況下,我的建議是仔細閱讀錯誤消息。 解決方案通常在這些注釋中。 如果解決不了,就復制筆記,到網上搜索一下。

    在此階段您將需要三個文件:

    對于每一個點,我只推薦一個我認為最合適的,以免你陷入選擇的困境:

    CS 50,這是哈佛大學的計算機入門課程。 我忘了我是大一還是大二讀的。 那時我感覺自己就像是撿到了寶一樣。 鏈接如下:

    關于尤辛,我至今記憶猶新的一點是,老師講的時候,直接引用了查字典的過程,然后當場把字典撕了。 。 。

    另外,本課程采用C語言作為教學語言,這也是非常罕見的。

    因為國外很多著名的CS學校的入門課程都會使用類似這樣的語言。

    但事實上,你會發現在CS 50中,你不會說太多C語言語法。 C語言只是作為傳達編程思想、帶領你入門計算機的媒介。

    而不是教 C.

    話不多說,推薦一款我以前在地鐵里用過的,浙江大學翁凱教授,去中文大學MOOC搜一下就可以了,下面是鏈接:

    說到這里,我不得不多說幾句翁凱老師。 我看過他的幾門課程,最直觀的感受是:

    講解很透徹,聲音很好聽,特別注重細節。 我們來貼一下浙江大學匿名課堂系統翁凱老師的點評:

    總之,翁凱老師很想用簡單的方式教給大家計算機和編程語言的內部原理。

    《C程序設計語言》,一本書堪稱C語言的圣經。

    短短篇幅涵蓋了大部分例子,練習也很經典,從hello world開始,到二分查找、二叉樹、快速排序、哈希表等等,甚至還寫了遞歸下降的詞法分析,幫助您理解復雜的聲明。

    不過里面的每一個例子都很難理解,需要一點基礎,但是不妨礙它作為入門書,可以多看幾遍。

    順便說一句,學習編程需要多寫,但是很多初學者不知道該寫什么。

    這里我舉一些學習C語言基礎語法后可以練習的例子:

    就用C語言一遍又一遍地寫鏈表,從最基本的鏈表到插入、刪除、單向、雙向、掛環鏈表。

    對鏈表進行反轉、合并、分裂等。

    別看基礎,但是很多學生到了高三的時候可能會寫錯。 在這里我們檢驗他們是否足夠細心和合乎邏輯。

    如果操作的話會不會斷鏈?

    如圖書館管理系統、俄羅斯方塊、貪吃蛇等。

    這類代碼大部分是500-1000,會綜合使用函數、文件操作、動態內存、指針等關鍵東西。

    第二階段:理解記憶、看書、寫代碼

    這個階段需要掌握一些計算機系統知識才能學好。 例如,虛擬地址與操作系統有關,函數調用堆棧與匯編有關。

    再比如,很多同學學習了半天還是不知道變量的聲明和定義的區別,以及它們的作用是什么。 這些其實需要了解內存分區。

    C語言的核心在于指針和內存。 能否學好、使用好C語言,更多地取決于你是否對計算機結構、存儲、運行原理有扎實的了解。

    因此,強烈建議在學習C語言的同時,學習補碼、數字的二進制表示、內存、匯編等知識,尤其是內存和匯編。 這兩個對于深入理解指針和熟練使用很有幫助。

    我就不詳細介紹了,要介紹的書都在這張思維導圖中。

    《C與指針》和《深入理解C指針》確實是涉及指針方方面面的好書,墻裂推薦。

    兩兄弟在理解之后其實并不能幫你提高寫代碼的水平。 主要原因是編譯和鏈接過程中的一些錯誤更加清晰,不會造成混亂。

    例如,鏈接過程中常見的錯誤是符號未找到 ( ) 和符號重新定義 ( )

    當您熟悉鏈接過程和符號搜索過程后,您將能夠輕松解決相應的錯誤報告。

    C語言下是匯編。 如果你懂得匯編,就可以直接脫掉C語言的衣服,看看背后的實現。 比如大家都在討論數組和指針的區別?

    你去寫一個程序,然后運行gcc -S,看一下匯編代碼,你會發現沒有什么區別。 。 。

    您不需要能夠編寫匯編,但您可以理解并記住其中的一些。 你不需要刻意記住各種指令和尋址方法。

    好了,今天的C語言學習之旅就到此結束了。 其實還有很多東西沒有提到,比如Linux C的方向。

    主要目的是為了突出C語言本身的學習,不想讓觀眾不知所措,讓大家迷失方向。

    另外,我還總結了我推薦的這些書:

    學完這套,C語言的基礎問題就不大了。

     
    反對 0舉報 0 收藏 0 打賞 0評論 0
     
    更多>同類資訊
    推薦圖文
    推薦資訊
    點擊排行
    網站首頁  |  關于我們  |  聯系方式  |  使用協議  |  版權隱私  |  網站地圖  |  排名推廣  |  廣告服務  |  積分換禮  |  網站留言  |  RSS訂閱  |  違規舉報
    Powered By DESTOON
     
    三级精品影视国产,欧美乱伦免费综合,亚洲a在线中文,人妻色综合网站
  • <center id="q6uyy"><td id="q6uyy"></td></center>
    <dd id="q6uyy"></dd>