《c程式設計》讀後感
網上很多人評價這書不高,其實從內心裡講,是這本書帶領我入門的。我說的是譚浩強先生的書。
這本書講得很細,而且知識的銜接也做得很好。我以這本書為重點,再以其它的c語言教程為輔,終於算是入了c語言的門。
如果能讓我再從頭學習的話,我一定是認真的讀這本教材,再把c的標準庫的原始碼作為閱讀材料,這樣既複習了c語言,又學會了讀原始碼,再學會了標準庫的使用。
有了c語言基礎,再去讀相關coreutils的原始碼。
有人說,寫作要有5倍的閱讀量。其實我以為,要有50倍的閱讀量才行。讀書破萬卷,自然下筆如有神了。我發現讀得多,思維才會活起來。也會學會寫作的套路。如果沒有海量閱讀作為基礎,寫作無從談起。
這本書,我重複的讀,再一遍遍的把知識點在大腦中放電影。
比如《指標》這一章,就要反覆讀。
c的函式引數是傳值的,因為在函式中修改了引數的值,是影響不了主調函式中的值的。如
int add2(int n)
int main()
主調函式x的值是10,調函式add2,在add2中把引數值加2,但這個相加的結果不會傳回給x.
因為c的函式呼叫就是堆疊模型。
如:(頂層 main x )
(一層 add2 n )
當add2呼叫完了,形參就自動消失了,因為形參的值與主調函式中的x是完全沒關係的。
如果你想讓函式修改的結果傳回給主調函式,就需要使用指標。如
int add2(int &n)
int main()
看到沒。所以我把這一節,反覆的讀,牢牢記住,函式引數不能改變實參的值,但可以改變形參所指變數的值。
接著就把指標運算與陣列二者合一。
如int a[10]
int *p
p=a此處,是把陣列a的首位址給指標p,而不是把陣列a全部給p,因為p是指向乙個整數的指標,你一下給10個數它,它也消化不了。
然後如果引用a[i]實際上,可以通過*(a+i)或*(p+i)再使用。
有可能的話,把它與組合語言聯絡起來。因為在彙編中,為了取得記憶體中資料,需要使用段位址+偏移位址。如果偏移位址直接給出來,象
mov al,[1000]
此時,把ds*16+1000的資料給ax.可如果要把[1000]開始的連續5個位元組加起來,那如何?
先讓bx=0
mov al,[bx]1000
bx++
mov al,[bx]1000
等等。因此,後來,[bx]1000把順序交換一下,變成1000[bx],就成了c語言的陣列形式。
有人講,c語言的指標、陣列是最妙的發明之一。確實,用c語言還是比彙編要漂亮多了。
有了一維陣列,再學習多維陣列。就容易了。
我原來學多維陣列時,總想不明白,這個象二維陣列明明是平面的,但記憶體模型是一維的,那如何變呢?象
int a[3][4]
記憶體中這樣放:
a[0][0],a[0][1],a[0][2],a[0][3],
那a[1][0]放哪兒呢?,學了資料結構,我想,因為c語言是按行儲存的,我想,應該是這樣放。
a[0][0],a[0][1],a[0][2],a[0][3],a[1][0]
如果列印出位址,就會看到這種相鄰關係。
哎呀,如果再這樣寫,就太細了。譚先生的這本書很是經典,真的。如果感覺難以理解,我想除了要多看幾次外,還要學組合語言和資料結構以及標準庫。
有人講過這麼乙個觀點,就是看書時,比如學c語言吧,以一本書為主,再新增若干本書為輔,交叉著看,效果最好。如果為主的書花80%的精力,那其它若干本書花的精力為20%,如果每本書花的精力都一樣,那其實是學不好的。
我把這本教材時時放在枕邊,乙個知識點就是自己理解了,看看別人如何把它說清楚,其實也是很好玩的。而何況有些知識自己根本就不清楚。
我想,我再也不會講某本書的不好了,如果我不喜歡某書,略過即可。如果講某書一大堆不好,其實是把自己的感情錯誤的投入的。既然不喜歡,就不好講它的壞話。但這本書,我真是喜歡,哪怕說錯,我也要多說些。
《程式設計實踐》讀後感
程式設計實踐 讀後感 昨天晚上讀這本書,重點讀資料結構這一章,也許是因為讀gawk101原始碼有一段時間,在重讀時,感覺作者寫得真好。我重點放在書中的 上,發現那些 寫得像珍珠一樣,真是漂亮。作者寫了鍊錶,然後再寫乙個遍歷鍊錶的函式,因為遍歷鍊錶時,可能是要列印,可能是要統計元素個數,可能是要找某個...
程式設計珠璣讀後感
第二章則又提出了三個問題,提到了二分查詢的廣泛應用,打破了對二分查詢的狹隘理解,以及一種旋轉向量的巧妙演算法 感覺用到了數論的一些知識 感覺最巧妙的還是對與查詢字典中所有變形詞集的巧妙解法,其採用利用簽名歸類的方法,然後對簽名進行排序,我之前從來沒有遇到過,感覺十分新奇。第三章講了一些資料結構的技巧...
ruby元程式設計讀後感
買來後花了乙個下午,粗讀了一遍,有很多新知識,也有些看不懂的,需要慢慢消化。明白了幾點 1 開啟類的概念,而不是簡單的定義類 3.times do class c puts hello endend 2 列舉陣列的方法 methods 3 kernel是乙個模組,不是乙個類 4 動態定義方法 def...