首頁>Club>
7
回覆列表
  • 1 # 無理取鬧的時候

    最好先把彙編學了,底層的懂了,看看c是怎麼轉成彙編,c語言其實也只是註記符號,離機器語言也很近的,方便我們理解,只是為了學c語言而學其實很吃力的,

  • 2 # 七步聖之百花堂

    沒什麼特別難得吧!

    非要說說的話,就是牽扯到記憶體地址的指標部分了,一級指標、二級指標、函式指標、指標與陣列表示的關係等等!

    好好理解就可以了!

  • 3 # 月飲沙丘

    我覺的最大的難點是與實際向聯絡,光學語法,演算法都沒大用,一遇到實際問題,不懂的,有什麼用,要理論與與實踐向結合,才學的快,學出來才有用

  • 4 # 嶛崛樵夫

    最大的難點是理論與實際脫節。參加工作後才真正理解C語言,因為自學了微控制器C51,這樣才理解了二進位制、暫存器等概念

  • 5 # 玩程式設計

    萬事開頭難,只怕有心人。只要你真正感興趣,肯定能學好。

    從一個大學學習過來人,和有幾年程式設計工作經驗者的角度講講我的經驗。

    我對題主問題的審題,理解題主可能是想學,沒有人教,只能自學,但不知道方法,同時擔心最難的地方搞不定。我來談談學習方法和最難的地方。

    學習方法:買一本經典大學c語言教程(譚浩強版本),頭一個月粗略讀一遍,此一邊不求完全看懂,只求對c語言程式設計有個全面瞭解。重點必須做的兩件事情。

    第一.每一章節中的程式程式碼一定要在電腦上抄一邊,並且保證能正常執行,你會發現看不懂的東西,再敲程式碼的過程中就懂了。類似跟學腳踏車,學再多理論,比如實際去騎車,摔幾次就會啦。也程式碼也是一樣,你在調式程式碼的時候慢慢就理解了會寫啦。

    第二.把你不懂的知識點,在書本中圈出來,理解的要點不管對錯都寫下來(便於回頭看的時候,對比糾正加深理解)。然後繼續往後讀,不要死盯一點不往前走。你會慢慢發現後面和前面有連貫的地方,也有不連貫的。回頭再往前看,前面的知識其實很好理解。

    在大學裡面,讀完一遍差不多一到兩個月後,再精讀一遍。

    最難的知識點:指標是最難得,一維、二維、多維。一輪輪搞下來,都會暈。沒有計算機基礎的同學,對儲存、地址這樣的概念比較難理解。因為沒有直觀的東西給你們看。有個好辦法幫助理解:把儲存介質想象成圍棋盤。每一個格子代表一個位元組儲存空間,有獨立的地址編號。一行代表一維,一個面(整個棋盤)代表二維,如果三維就是隻有一行的棋盤和另外一個完整棋盤疊加,四維就是兩個完整期盼疊加,依次類推。用一根萬能筆代表指標,這根筆有讀的功能、寫的功能、擦除的功能等(給指標一個地址和一個命令,就可以幹相應的事)。然後結合實際例子,根據上面理解方法在腦子中算出程式結果,最後執行程式驗證理解的正確性。

  • 6 # cpp架構

    c語言最大的難題是指標和記憶體,這是難倒眾多新手的關鍵地方,指標本身其實不難,難的是在開發中指標的邏輯變化。

    指標移動

    int * ip = NULL;

    ip += 1; // ip - NULL = 4

    void * vp = NULL;

    vp += 1; //編譯錯誤!

    指標轉換移動

    unsigned int i = 0;

    unsigned char *p = (unsigned char *)&i;

    *(p + 0) = 255;

    *(p + 1) = 255;

    *(p + 2) = 255;

    *(p + 3) = 255;

    指標指向記憶體邊界

    int arr[] = {0};

    *(arr + 1) = 1314; //超出邊界

    arr++; //不允許++

    堆疊記憶體問題

    棧主要是用於邏輯計算、資料交換等,以及函式內定義的臨時變數,這部分變數只會在當前作用域有效。堆記憶體透過malloc開闢,資料則是在一直存在,除非free和退出程式。

    1、注意棧溢位,不要把記憶體開銷大的結構定義在棧上,因為棧的空間很小。

    2、注意被調函式變數分配,防止返回臨時變數地址給外部操作。

    多級指標難點

    多級指標的互相操作很容易懵圈,需要一級一級的查詢地址,特別要認真和細心。

    野指標

    int * i = (int *)malloc(sizeof(int));

    free(i);

    *i = 10;

    野指標是致命問題,能夠直接讓程式崩潰。這只是一個簡單的程式,當代碼變得非常複雜的時候,容易出錯的機率更大。

    棧作用域(有問題)

    char* getstr()

    {

        char str[] = "abc";

        return str;

    }

    char * p = getstr();

    常量區作用域(沒問題)

    char* getstr()

    {

        char * str = "abc";

        return str;

    }

    char * p = getstr();

    總結

    c 和 c++固然難學,只要用心去學習和理解,終會學會的!

  • 7 # 聊科技愛生活

    自學C語言的最大難題是什麼?大家都回答說是指標,我有不同的觀點。

    C語言是緊緊貼合硬體的高階語言,因此要精通C語言,從根本上說,是熟悉硬體。指標本質上就是記憶體地址的索引嘛,然而記憶體是怎麼回事,它是怎麼排列的,位元組對齊是怎麼工作的,這些都是計算機硬體層面的事情。學好C語言,不懂硬體是不可能的。因此,除了計算機和電子/通訊專業以外的人,很少有人真正精通C語言的。

    我也不建議科班以外的人來學習,學習其他高階語言就行了,比如Python和Java。

  • 8 # 涇渭漳淮

    學c最大的難題是語言之外的東西,c要寫得好,你必須得懂計算機,懂CPU,懂記憶體,懂cache,懂指令集,不一定能熟練寫彙編,但至少得知道彙編是什麼,得懂堆疊,得了解編譯器。如果這些你都懂得差不多了,那指標之類的簡直就是小兒科,水到渠成自然就懂了。

  • 9 # 大學生程式設計指南

    萬事開頭難,自學C語言最大的困難在於遇到問題不知道如何解決,還有不知道學到什麼程度才能找到工作,這是自學程式語言最大的障礙,學到中間不知道什麼時候是個頭,遇到問題沒有解決的途徑,這是自學過程中遇到的最大問題,但這種不能歸結為自學中遇到的難題,應該準確來講是學習程式設計都會遇到的問題,和具體學習什麼程式語言並沒有太直接的關係,學習任何程式語言都會存在這種疑惑。

    從事C語言程式設計開發已經有十幾年,這門程式語言從入門的難易程度看並不是最難的,語法相對比較少,但C語言最大的特別是組合非常靈活多變,好多初學者學完基本的語法,覺得這門程式語言的程式碼應該都能看懂,曾經在學習初期學完語法之後去圖書館借了本linux核心解析去閱讀,在開始階段還是信心滿滿,結果看了幾十頁之後就開始有懷疑人生的感覺,又老老實實還回圖書館了,繼續基礎知識的學習之中了,C語言的理論掌握了距離真正的實踐還是有很大的差距,實踐是永遠無法取代的過程。

    C語言核心語法屈指可數,指標,函式,結構體,以及記憶體管理再加上常見的資料結構,說起來就是簡單幾句話的事情,但在實際過程中不斷在實際操作中完成一個個程式設計場景的試驗,不斷在程式設計思路中填充程式設計脈絡,就拿網路程式設計例子來講,如果用C語言去完成需要對socket程式設計有所瞭解,socket程式設計屬於作業系統的知識,程式設計的過程不僅僅是程式語言語法的問題,還會涉及到使用者的使用習慣,以及程式設計的環境,常見的程式語言還有linux,windows,mac三種,不同的作業系統api的使用習慣也是不相同,程式語言的學習需要對程式設計環境有一個適應的階段。

    C語言的學習最快的方法就是直接在專案中實戰,但是這種機會不是每個人都能涉獵到,參加培訓的機構中也會竭盡全力在模擬這個過程,在自學的過程中也會不斷的嘗試在開源社群中尋找實戰的味道,在真正專案實戰中不斷的總結經驗,現在程式設計入門的門檻已經提升了許多,在十年前C語言學點基本的語法就能找到個工作去參與到實踐中去,但現在已經沒有那麼好的機會了,這也是行業成熟進步的一種標記。

  • 10 # Mg45

    指標應該是C語言中較大的難點,多看影片多實操應該沒問題的!如果學完後的目的是學習java,php等(非C++)高階語言,則不用太在意指標這塊,因為高階語言對指標有較好的封裝,一般不會觸碰到較底層的指標這塊!

  • 中秋節和大豐收的關聯?
  • 有什麼美白的護膚產品?