-
1 # 無理取鬧的時候
-
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++)高階語言,則不用太在意指標這塊,因為高階語言對指標有較好的封裝,一般不會觸碰到較底層的指標這塊!
回覆列表
最好先把彙編學了,底層的懂了,看看c是怎麼轉成彙編,c語言其實也只是註記符號,離機器語言也很近的,方便我們理解,只是為了學c語言而學其實很吃力的,