對《theCprogramminglanguage》的讀后感_第1頁
對《theCprogramminglanguage》的讀后感_第2頁
對《theCprogramminglanguage》的讀后感_第3頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、對the Cprogramming Ianguage的讀后感首先要介紹的是本書的兩位作者,的的確確是c的發(fā)明者之一,而我選擇這本書的原因有二:其一,這是一本英文原版書,可以強化自己的英語閱讀能力(其實并不需要多少詞匯量),對the Cprogramming language 一書的讀后感。二,我或多 或少衷于此書的兩位作者, 他們自己身為C的發(fā)明者之一是如何 來闡述這門語言的。然后說說我讀完后對 C的認識和對語言的認識。 語言就 是語言,只是用來表達或者實現(xiàn)你要描述的東西,比如算法的一一種工具,無論使用何種語言都是可以的,就好比,你可以用中文,日語,英語,法語,意大利語。來寫一篇文章,它所要表

2、明的東 西其實是一樣的。而效率而言肯定是略有不同,而在讀書的時候讓我體會最深的就是計算機中的所謂tradeoff ,是一種平衡的概念,你需要得到某些性能的時候畢竟會在別的地方犧牲某些性 能,比如你用C語言寫程序的時候可以相當靈活,它的檢查機制也許沒有那么嚴格,而當你使用JAVA的時候會有非常多的limits ,而相對的用C寫的畢竟更接近底層,寫起來更復雜,用JAVA則相對更容易更方便一些,但是在執(zhí)行的時間上,差不多 會有20倍的差距,所以具體使用何種語言取決于你要達到的目的,你是希望更快速呢,還是希望更這也是一種tradeoff ,印證了國人的一句話,有得必有失,但失去的東西不一定是必須的,得

3、到的也不一定是有用的。接下來說說算法和數據結構,其實鄙人在這方面絕對是 班門弄斧,但自從我認真的看完這本書,不,其實是看了沒多久的時候我就感覺到書上用到了很多數據結構,很多sorting 的,很多b-tree 的知識,hash表的知識,list ,stack, queue,以 前上課的時候完全無法理解,但是現(xiàn)在漸漸的有些明白了。比如,拿sorting 中的ion sort,merge sort,前者的算法很容易如果元素小于2,就不用排序了,如果大于等于2的話就從第二個元素開始往前進行比較,直到所處的位置之前的元素都比他小為止 嗎,然后從第三個元素開始,第四個元素,第五個元素其實用到了兩個for

4、-loop 語句,即所謂的內循環(huán)和外循環(huán),這種算法 的時0(N ),而后者是將一列元素分成已經排好序的兩排,將 每排最小的兩個元素進行比較,放入一個數組中,繼續(xù)重復步驟即可,這樣下來它的時間復雜度是O(LOG N*N),也許從前你學到這里到這里就結束了,但是你想想,既然一個快,一個慢,那要 慢的那個干嗎呢?其實他們在不同的情況下是不同速度的,前者 在N較小的時候表現(xiàn)更出色,而后者在N較大的時候表現(xiàn)更出色。然后說說大家覺得最容易的基本類型問題,基本的類型有 int short long float double char, 然 后pointer,struct,union,enum等等,以前我的理

5、解是,整型就整型唄。但是不同的整型對應不同的位數,整型還分為符號整,和無符號整,表示范圍當然不盡相同,不同的機器整型的位數也有區(qū)別,而所謂的 char其實也算是整型,只不過是對應的ASCII碼而已pointer 是C的精髓不易掌握,但是用途確實很大,其 實里面存的是內存的地址而已,沒什么太大區(qū)別,struct 就是將許多類型的元素封裝起來放在一起來更加明白的表示某些數據結構而已,比如,坐標平面上的點struct pointint x ; inty ; point ;這樣你就定義了一個簡單叫做point的結構體,當然其中有個叫做typedef的東西確實相當舒服,可以大大加強一 個coding中十

6、分重要的可讀性的概念,書中反復強調,每個人 都必須有自己的coding style當然是趨向好的那種風格,對變量的命名是十分重要的一環(huán),然后對代碼的注釋也相當重要,比如你定義了某函數某變量,如果覺得僅僅靠函數名或者變量名不能準確的把握其用途的話,那么請毫不猶豫的注上注釋,方便他人理解。而union無非是幾個數據類型共用了一塊內存罷了,目的是節(jié)省空間。enum的用途挺多的,有時候可以代替#defineXXXX 1000之類的標志。然后是數組,好東西。連續(xù)分配多個相同類型的內存單元。用數組名表示其首元素的內存地址,什么。地址。那不就是 放在指針里的東西嗎?沒錯,的的確確就是放在指針變量中的東 西,

7、所以你完全可以寫出下面這樣的代碼,int a=1,3,4;int*p ; p=a;然后就可以用指針去訪問數組里的元素了=|很詭異是吧。我也覺得。順便說一下吧=原來ANSI C是沒有string這個基本類型的,但是你可以通過下面兩種方式達到定義一個 string 的目的=詭異。char*p= “your string words ”; or char p= “ your string words ”;詭異吧=其實不詭異,因為p表示的都是字符串的首字符的內存地址而已。alloc和malloc我記得學數據結構的時候講鏈表的時 候有過malloc的概念,當時老師講的什么反正我是忘記了,但 是現(xiàn)在=首先

8、malloc是分配的heap中的內存,這個是一個函數, 函數聲明大概是這樣的,void*malloc(int size) ;也就是說返回的是什么?是指針類型,也就是返回的時候地址,當然,如果 有足夠的內存空間給你就返回其首地址嘛,如果沒有,就返回 null 了 =表示分配失敗了,讀后感對 the Cprogramming language一書的讀后感。alloc分配的不是heap里的內存是 stack中的,而 malloc 是需要用戶自己使用free 釋放的,而alloc無需用戶自己釋放。頭文件,最簡單的一個問題.我們??吹?includestdio.h or#include ” stdio.

9、h ”前者,直接去標準庫找,后者, 從當前文件中開始找,找不到,再去標準庫找。也就說如果該頭文件是自己寫的,那么肯定要用后者=。如果是標準的那么前者。 問題簡單吧=可悲劇的是我不知道=然后是 #define#ifndef#ifdef#endif#else見過不=我想說我沒見過。書里稍稍提及,我發(fā)現(xiàn)不懂的真多,但是看看那些頭文件都是這 個東西寫的=我就知道這個東西很牛。然后是一種節(jié)省空間的方式,也許有時候我們只要某個數類型的一位或者兩位就可以了=那么給了不就是浪費空間了嗎。那么我們就可以再結構體里面這樣定義=unsigned int x:1 ; usigned int y : 2這樣就只使用到其

10、中的一位 ,分配起來就 用其后的兩位=。很神奇吧=。main函數的參數問題,我搞了 3個多小時,就為了做 一個很容易的小程序。一個類似commandne的命令,眾所周知,main函數也可以有參數一個叫int argc,char*argv 顧名思義前者記錄了又多少個參數值,后者是記錄參數值,但是argv0是不可用的,因為已經是該文件的文件名=后面的值可以自己定義=或者給予賦值=。也就是說如果我的程序名字叫echo(后面加上參數值)qinbinhua wwwww 然后按下回車就要達到現(xiàn)實qinbinhua wwwww的目的=很容易吧=,當然既然是command_line的命令就要在 cmd下嘗試=

11、我弱智般的從 3點4 點5點6點一直玩兒到7點多我媽媽都起床了,我都吃完早飯了, 都沒玩兒出來,結果呢=只要把程序名字改為 echo就行了 =因 為argv0默認的就是該程序名=而在cmd下。打該程序名不就 是相當于調用這個程序了嗎。簡單點講,在cmd下打這個程序名echo就是打開這個echo.exe的程序就是運行了嘛。哎=然后我 對自己來一句,白癡。在讀本書的過程中我寫了很多的小程序我看看去,一共65個吧=還不錯啦。有些蠻多行的幾百行。有些很短很短就五 六行。但是通過寫這寫小程序我發(fā)現(xiàn)了 =coding這個東西關鍵 是動手去寫,有件事兒特別能說明這個問題=我無聊,去看看google,微軟,華

12、為等等的面試題,找里面的題目做,其實大都 是些基礎的題目=但是很多東西都忘記了 =涉及也很廣,答的并 不全面,但是當我看到編程題目的時候,我爽了 =基本都是我平時那65個小程序里寫過的一些東西=然后我想這老子肯定能寫 出來。太容易了,然后一看分數一題一般都是10幾20幾分=于是2B 一樣的想,都會寫哈哈哈哈。就躺下睡了,然后想著想 著睡不著。琢磨著要不自己寫一下吧。反正都會寫,看看到底能不能寫出來=結果=寫是一會就寫好了就 10分鐘樣子=然后就 一直報錯一直重寫,一直想,一直查資料,5點6點又是7點多的時候還沒寫出來,結果去吃個早飯,回來就該了4個符號=定義上的東西=馬上運行起來了 =結果完全

13、正確=我傻了。本來 以為立馬可以寫出來的code搞了半天沒寫正確=還真是看起來容易做起來難啊?;竟Σ辉鷮?。后來想想我寫的不錯嘛 =然后 去看評分標準,原來一個很簡單的strcmp的函數,10分,實現(xiàn)了沒用,還要看你的 coding style ,根據style 給分,然后我 一看我的code頂多給個5分。都是一些小細節(jié)的東西=命名也 有問題。要想寫好一個perfect的strcmp注意的東西還是很多的=然后我找找看哪個10分的版本=。實在找不到了,悲劇。 反正就是無論從函數名,變量名,變量類型,等等綜合考慮下來都有所考量,可讀性很強=然后是我寫的那個判斷回文的的函數,其實說出來很容易,寫個r

14、everse的函數把數組內容倒置,然后用strcmp判斷是否相等就行了 =考慮一下錯誤的可能性就 可以了 =相當簡單=可是我就因為一個字符串定義的問題搞了 半天=我 用的是 char*a ” xxxxx ”;而當 我改成 chara= “xxxxxxx ”;的時候程序就可以運行了=原因呢。我也不知道。我想出在這兩種定義方式的區(qū)別上。很煩,很雜的一篇文章,還有很多很多想要說=寫了就 感覺更煩更雜了 =所以就跳過了。這文章其實就寫給自己的算作是對這本書的一個小小的收尾,接下來我要投向JAVA的懷抱了,而且是中文書,輕松很多,而且學過=先是基礎然后看 JSP&SERVLET那本又是英文 的,又要糾結了,不過不看英文真的不行,中文書我終于知道為什么都是雞肋了,中文書有些翻譯不準確,而且譯者水平有限, 有些東西表詞達意上肯定有出入,不像英文講起來比較淺顯易 懂,而且中文書大都不結合例子,你如果去看下我看的這本 c的話,你會發(fā)現(xiàn),作者不斷的在提示之前所寫的例子,而且所有的內容都是圍繞你寫的例

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論