引言: 未進職場,真正接觸產品開發之前,基礎還是才是最重要的。大學的好處就是隨心所欲的學。怎麼理解就怎麼理解,不違規,不犯法。呵呵,從今天開始的一段時間,我開始將c語言和資料結構的理解寫寫,算大學的最後珍惜了。一千個讀者就有一千個哈姆雷特。錯與對無關緊要。也許今日膚淺,自己他日有新想法會回來修改完善。
程式設計語言這東西,其實我就是喜歡看成資料區,一塊塊的,進行相關操作。
早晨起床,大家都去上課。我賴床,隨手拿起床頭的資料結構和演算法分析來看。以前的老師,我一點都不喜歡,上課照本宣科,沒給我們模型過,還雙語教學。也就是課本是英語,老師一句英語都不講。當時學單片機,沒怎麼用心學,考試60分,迴圈鏈表竟然考大題,沒看,失策。很久沒摸這本書,躺在床上將列表看完,才起床。
馬克思主義告訴我們,事物之間是是相互聯絡的。好吧,我用記憶體空間結構和C語言來理解這些東西,還有編譯器。
掌握語言,至少要理解記憶體空間結構和編譯器怎麼工作,才算瞭解。自己的C不敢說和很好,只能說基礎還行,現在簡曆上說精通的太多了。現在總結一下自己看資料結構,看C語言代碼的一些理解。掌握東西,別人的一大堆概念,有時候對自己是水過鴨背一樣,所以用自己的想法來理解才是王道。
數值,地值,資料區,基地址+位移地址,資料類型和資料結構,資料的定義、初始化,引用。
1、數值,地值--這兩個只是我的概念而已。一般C的書上都寫資料,地址,指標,數組名什麼的咚咚,這是人家喜歡的叫法,而我,想想cpu處理東西是指令和資料,電腦裡什麼都是二進位,0和1,都是資料,代碼一編譯,就都是目標代碼了。存到實體記憶體中,不就都是資料了嗎,但是,這些東西,要區分,有些是需要處理的真正資料(數值),有些則是資料的門牌(地值),比如剛才說的變數名等。
2、資料區--儲存的根據資料類型,都是一塊一塊的,也就是連續儲存,可以是大單元,可以是小單元。而剛好,指令儲存和改寫資料都需要按塊找到位置(資料區塊的基地址),要麼處理整塊大單元,或者其中的小單元,或者單個資料類型,比如表是大單元,節點是大單元中的小單元,何有各個域是對應的資料類型,數值和地值。
3、基地址+位移地值——這個就是找資料區塊的方法。儲存空間是實體記憶體大小,一般說多少KB,MB,GB等,而這些空間是映射到對應的地址空間的,也就是編個號,讓CPU認識,比如從0—10,大小是11,編址是從0~10,(電腦裡基本上都是從0編號)。記憶體的物理串連就是掛到系統匯流排上,用解碼器譯指令,這樣CPU就可以找到資料進行資料處理了。基地址+位移地址就是一個空間連續儲存的資料區塊。基地址就是大單元地址,小單元就是小單元重新編號,挨家挨戶就可以找到了。比如X8086裡邊,資料區塊段地址是0x2000,位移地址是0x03,那麼基地址+位移地址,就可以找到0x20003的單元數值了。注意,X8086段地址儲存空間是16位的,地址線是20根,所以會有地址值處理。結構體中,P->next,是可以這樣解釋的,比如資料結構表中,P指標指向節點node,那麼P對應的地值是node這個連續儲存的結構,而P->next則是P基地址+next位移地址,就找到了next這個域,資料是地值,放到地址寄存器進行處理。
4、資料類型——沒什麼好說的,就是基本的資料單元形式,記憶體佔多少位元組。其他不是說很多。
5、資料結構——就是一種基本的資料單元以上的組成形式。記憶體空間分布。
6、資料定義、初始化、引用——前面我說過,電腦處理的都是資料,那麼代碼中見到定義,就是給地值,初始化是給資料區填內容,可以是數值和地值。引用則是使用資料,取到寄存器去處理。比如說,譚老的書:一維數組的定義方式為 類型說明符 數組名[常量運算式]。然後下面就是形式明,其實,然後這樣不行,那樣不行,好像沒說到實質,以前我就認為,管他呢,都是編譯器乾的活。
比如變數定義,數組定義,指標定義,結構體定義,共用體定義,函數定義,等等,在我看來,都是給地值,要不是大單元,要麼是小單元。初始化——就是給地值對應的資料區填內容,變數是數值,指標。結構體資料區塊。引用——資料地值和數值這兩個元素有了,那就可以處理資料了,這是演算法中取出來,在寄存器操作。改寫後存進去或者釋放掉。
先下解釋說明這些,這個是我閱讀代碼構造模型的核心咚咚。或許自己語文不太好吧,對一般教程上的東西,總是感覺名詞概念太多,太複雜,還是自己理解,簡單化。畢竟知識是自己腦子裡的東西。
今天就寫這些,下次分析一些代碼,比如表,棧,隊列,樹,和一些排序演算法。都很基礎。