對(duì)《theCprogramminglanguage》的讀后感_第1頁(yè)
對(duì)《theCprogramminglanguage》的讀后感_第2頁(yè)
對(duì)《theCprogramminglanguage》的讀后感_第3頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、對(duì)«theCprogramminglanguage»的讀后感首先要介紹的是本書(shū)的兩位作者,的的確確是c的發(fā)明者之一,而我選擇這本書(shū)的原因有二:其一,這是一本英文原版書(shū),可以強(qiáng)化自己的英語(yǔ)閱讀能力(其實(shí)并不需要多少詞匯雖),對(duì)«theCprogramminglanguage一書(shū)的讀后感。二,我或多或少衷于此書(shū)的兩位作者,他們自己身為C的發(fā)明者之一是如何來(lái)闡述這門語(yǔ)言的。然后說(shuō)說(shuō)我讀完后對(duì)C的認(rèn)識(shí)和對(duì)語(yǔ)言的認(rèn)識(shí)。語(yǔ)言就是語(yǔ)言,只是用來(lái)表達(dá)或者實(shí)現(xiàn)你要描述的東西,比如算法的一*種工具,無(wú)論使用何種語(yǔ)言都是可以的,就好比,你可以用中文,日語(yǔ),英語(yǔ),法語(yǔ),意大利諾。來(lái)寫(xiě)一篇

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

3、到的也不一定是有用的。接下來(lái)說(shuō)說(shuō)算法和數(shù)據(jù)結(jié)構(gòu),其實(shí)鄙人在這方面絕對(duì)是班門弄斧,但自從我認(rèn)真的看完這本書(shū),不,其實(shí)是看了沒(méi)多久的時(shí)候我就感覺(jué)到書(shū)上用到了很多數(shù)據(jù)結(jié)構(gòu),很多sorting的,很多b-tree的知識(shí),hash表的知識(shí),list,stack,queue,以前上課的時(shí)候完全無(wú)法理解,但是現(xiàn)在漸漸的有些明白了。比如,拿sorting中的ionsort,mergesort,前者的算法很容易如果元素小于2,就不用排序了,如果大于等于2的話就從第二個(gè)元素開(kāi)始往前進(jìn)行比較,直到所處的位置之前的元素都比他小為止嗎,然后從第三個(gè)元素開(kāi)始,第四個(gè)元素,第五個(gè)元素其實(shí)用到了兩個(gè)for-loop語(yǔ)句,即所

4、謂的內(nèi)循環(huán)和外循環(huán),這種算法的時(shí)O(N),而后者是將一列元素分成已經(jīng)排好序的兩排,將每排最小的兩個(gè)元素進(jìn)行比較,放入一個(gè)數(shù)組中,繼續(xù)重復(fù)步驟即可,這樣下來(lái)它的時(shí)間復(fù)雜度是O(LOGN*N),也許從前你學(xué)到這里到這里就結(jié)束了,但是你想想,既然一個(gè)快,一個(gè)慢,那要慢的那個(gè)干嗎呢?其實(shí)他們?cè)诓煌那闆r下是不同速度的,前者在N較小的時(shí)候表現(xiàn)更出色,而后者在N較大的時(shí)候表現(xiàn)更出色。然后說(shuō)說(shuō)大家覺(jué)得最容易的基本類型問(wèn)題,基本的類型有intshortlongfloatdoublechar,然后pointer,struct,union,enum等等,以前我的理解是,整型就整型唄。但是不同的整型對(duì)應(yīng)不同的位數(shù),

5、整型還分為符號(hào)整,和無(wú)符號(hào)整,表示范圍當(dāng)然不盡相同,不同的機(jī)器整型的位數(shù)也有區(qū)別,而所謂的char其實(shí)也算是整型,只不過(guò)是對(duì)應(yīng)的ASCII碼而已,pointer是C的精髓不易掌握,但是用途確實(shí)很大,其實(shí)里面存的是內(nèi)存的地址而已,沒(méi)什么太大區(qū)別,struct就是將許多類型的元素封裝起來(lái)放在一起來(lái)更加明白的表示某些數(shù)據(jù)結(jié)構(gòu)而已,比如,坐標(biāo)平面上的點(diǎn)structpointintx;inty;point;這樣你就定義了一個(gè)簡(jiǎn)單叫做point的結(jié)構(gòu)體,當(dāng)然其中有個(gè)叫做typedef的東西確實(shí)相當(dāng)舒服,可以大大加強(qiáng)一個(gè)coding中十分重要的可讀性的概念,書(shū)中反復(fù)強(qiáng)調(diào),每個(gè)人都必須有自己的codingst

6、yle當(dāng)然是趨向好的那種風(fēng)格,對(duì)變雖的命名是十分重要的一環(huán),然后對(duì)代碼的注釋也相當(dāng)重要,比如你定義了某函數(shù)某變雖,如果覺(jué)得僅僅靠函數(shù)名或者變雖名不能準(zhǔn)確的把握其用途的話,那么請(qǐng)毫不猶豫的注上注釋,方便他人理解。而union無(wú)非是幾個(gè)數(shù)據(jù)類型共用了一塊內(nèi)存罷了,目的是節(jié)省空間。enum的用途挺多的,有時(shí)候可以代替#defineXXXX1000之類的標(biāo)志。然后是數(shù)組,好東西。連續(xù)分配多個(gè)相同類型的內(nèi)存單元。用數(shù)組名表示其首元素的內(nèi)存地址,什么。地址。那不就是放在指針里的東西嗎?沒(méi)錯(cuò),的的確確就是放在指針變H:中的東西,所以你完全可以寫(xiě)出下面這樣的代碼,inta=(1,3,4;int*p;p=a;然

7、后就可以用指針去訪問(wèn)數(shù)組里的元素了=|很詭異是吧。我也覺(jué)得。順便說(shuō)一下吧=原來(lái)ANSIC是沒(méi)有string這個(gè)基本類型的,但是你可以通過(guò)下面兩種方式達(dá)到定義一個(gè)string的目的=詭異。char*p=“yourstringwords”;orcharp=“yourstringwords”;詭異吧=其實(shí)不詭異,因?yàn)閜表示的都是字符串的首字符的內(nèi)存地址而已。alloc和malloc我記得學(xué)數(shù)據(jù)結(jié)構(gòu)的時(shí)候講鏈表的時(shí)候有過(guò)malloc的概念,當(dāng)時(shí)老師講的什么反正我是忘記了,但是現(xiàn)在=首先malloc是分配的heap中的內(nèi)存,這個(gè)是一個(gè)函數(shù),函數(shù)聲明大概是這樣的,void*malloc(intsize);

8、也就是說(shuō)返回的是什么?是指針類型,也就是返回的時(shí)候地址,當(dāng)然,如果有足夠的內(nèi)存空間給你就返回其首地址嘛,如果沒(méi)有,就返回null了=表示分配失敗了,讀后感對(duì)theCprogramminglanguage一書(shū)的讀后感。alloc分配的不是heap里的內(nèi)存是stack中的,而malloc是需要用戶自己使用free釋放的,而alloc無(wú)需用戶自己釋放。頭文件,最簡(jiǎn)單的一個(gè)問(wèn)題.我們??吹?includestdio.hor#include”stdio.h”前者,直接去標(biāo)準(zhǔn)庫(kù)找,后者,從當(dāng)前文件中開(kāi)始找,找不到,再去標(biāo)準(zhǔn)庫(kù)找。也就說(shuō)如果該頭文件是自己寫(xiě)的,那么肯定要用后者=。如果是標(biāo)準(zhǔn)的那么前者。問(wèn)題簡(jiǎn)

9、單吧=可悲劇的是我不知道=然后是#define#ifndef#ifdef#endif#else見(jiàn)過(guò)不=我想說(shuō)我沒(méi)見(jiàn)過(guò)。書(shū)里稍稍提及,我發(fā)現(xiàn)不懂的真多,但是看看那些頭文件都是這個(gè)東西寫(xiě)的=我就知道這個(gè)東西很牛。然后是一種節(jié)省空間的方式,也許有時(shí)候我們只要某個(gè)數(shù)類型的一位或者兩位就可以了=那么給了不就是浪費(fèi)空間了嗎。那么我們就可以再結(jié)構(gòu)體里面這樣定義=(unsignedintx:1;usignedinty:2這樣就只使用到其中的一位,分配起來(lái)就用其后的兩位=。很神奇吧=。main函數(shù)的參數(shù)問(wèn)題,我搞了3個(gè)多小時(shí),就為了做一個(gè)很容易的小程序。一個(gè)類似command_line的命令,眾所周知,main

10、函數(shù)也可以有參數(shù)一個(gè)叫intargc,char*argv顧名思義前者記錄了乂多少個(gè)參數(shù)值,后者是記錄參數(shù)值,但是argv0是不可用的,因?yàn)橐呀?jīng)是該文件的文件名=后面的值可以自己定義=或者給予賦值=。也就是說(shuō)如果我的程序名字叫echo(后面加上參數(shù)值)qinbinhuawwwww然后按下回車就要達(dá)到現(xiàn)實(shí)qinbinhuawwwww的目的=彳艮容易吧=,當(dāng)然既然是command_line的命令就要在cmd下嘗試=我弱智般的從3點(diǎn)4點(diǎn)5點(diǎn)6點(diǎn)一直玩兒到7點(diǎn)多我媽媽都起床了,我都吃完早飯了,都沒(méi)玩兒出來(lái),結(jié)果呢=只要把程序名字改為echo就行了=因?yàn)閍rgv0默認(rèn)的就是該程序名=而在cmd下。打該程序

11、名不就是相當(dāng)于調(diào)用這個(gè)程序了嗎。簡(jiǎn)單點(diǎn)講,在cmd下打這個(gè)程序名ech。就是打開(kāi)這個(gè)echo.exe的程序就是運(yùn)行了嘛。哎=然后我對(duì)自己來(lái)一句,白癡。在讀本書(shū)的過(guò)程中我寫(xiě)了很多的小程序我看看去,一共65個(gè)吧=還不錯(cuò)啦。有些蠻多行的幾白行。有些很短很短就五六行。但是通過(guò)寫(xiě)這寫(xiě)小程序我發(fā)現(xiàn)了=coding這個(gè)東西關(guān)鍵是動(dòng)手去寫(xiě),有件事兒特別能說(shuō)明這個(gè)問(wèn)題=我無(wú)聊,去看看google,微軟,華為等等的面試題,找里面的題目做,其實(shí)大都是些基礎(chǔ)的題目=但是很多東西都忘記了=涉及也很廣,答的并不全面,但是當(dāng)我看到編程題目的時(shí)候,我爽了=基本都是我平時(shí)那65個(gè)小程序里寫(xiě)過(guò)的一些東西=然后我想這老子肯定能寫(xiě)出

12、來(lái)。太容易了,然后一看分?jǐn)?shù)一題一般都是10幾20幾分=于是2B一樣的想,都會(huì)寫(xiě)哈哈哈哈。就躺下睡了,然后想著想著睡不著。琢磨著要不自己寫(xiě)一下吧。反正都會(huì)寫(xiě),看看到底能不能寫(xiě)出來(lái)=結(jié)果=寫(xiě)是一會(huì)就寫(xiě)好了就10分鐘樣子=然后就一直報(bào)錯(cuò)一直重寫(xiě),一直想,一直查資料,5點(diǎn)6點(diǎn)乂是7點(diǎn)多的時(shí)候還沒(méi)寫(xiě)出來(lái),結(jié)果去吃個(gè)早飯,回來(lái)就該了4個(gè)符號(hào)=定義上的東西=馬上運(yùn)行起來(lái)了=結(jié)果完全正確=我傻了。本來(lái)以為立馬可以寫(xiě)出來(lái)的code搞了半天沒(méi)寫(xiě)正確=還真是看起來(lái)容易做起來(lái)難啊?;竟Σ辉鷮?shí)。后來(lái)想想我寫(xiě)的不錯(cuò)嘛=然后去看評(píng)分標(biāo)準(zhǔn),原來(lái)一個(gè)很簡(jiǎn)單的strcmp的函數(shù),10分,實(shí)現(xiàn)了沒(méi)用,還要看你的codingsty

13、le,根據(jù)style給分,然后我一看我的code頂多給個(gè)5分。都是一些小細(xì)節(jié)的東西=命名也有問(wèn)題。要想寫(xiě)好一個(gè)perfect的strcmp注意的東西還是很多的=然后我找找看哪個(gè)10分的版本=。實(shí)在找不到了,悲劇。反正就是無(wú)論從函數(shù)名,變H名,變H類型,等等綜合考慮下來(lái)都有所考雖,可讀性很強(qiáng)=然后是我寫(xiě)的那個(gè)判斷回文的的函數(shù),其實(shí)說(shuō)出來(lái)很容易,寫(xiě)個(gè)reverse的函數(shù)把數(shù)組內(nèi)容倒置,然后用strcmp判斷是否相等就行了=考慮一下錯(cuò)誤的可能性就可以了=相當(dāng)簡(jiǎn)單=可是我就因?yàn)橐粋€(gè)字符串定義的問(wèn)題搞了半天=我用的是char*a”xxxxx”;而當(dāng)我改成chara=“xxxxxxx”;的時(shí)候程序就可以運(yùn)行了=原因呢。我也不知道。我想出在這兩種定義方式的區(qū)別上。很煩,很雜的一篇文章,還有很多很多想要說(shuō)=寫(xiě)了就感覺(jué)更煩更雜了=所以就跳過(guò)了。這文章其實(shí)就寫(xiě)給自己的算作是對(duì)這本書(shū)的一個(gè)小小的收尾,接下來(lái)我要投向JAVA的懷抱了,而且是中文書(shū),輕松很多,而且學(xué)過(guò)=先是基礎(chǔ)然后看JSP&SERVLET那本乂是英文的,乂要糾結(jié)了,不過(guò)不看英文真的不行,中文書(shū)我終于知道為什么都是雞肋了,中文書(shū)有些翻譯不準(zhǔn)確,而且譯者水平有限,有些東西表詞達(dá)意上肯定有出入,不像英文講起來(lái)比較淺顯易懂,而且中文書(shū)大都不結(jié)合例子,你如果去看下我看的這本c的話,你會(huì)發(fā)現(xiàn),作者不斷的在提示之前所寫(xiě)的例子,而且所有的

溫馨提示

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

評(píng)論

0/150

提交評(píng)論