<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > 《C與指針》讀書(shū)筆記一

《C與指針》讀書(shū)筆記一

作者: 時(shí)間:2016-07-18 來(lái)源:網(wǎng)絡(luò ) 收藏

  我平時(shí)不太看書(shū)。倒不是我沒(méi)有讀書(shū)的習慣。而是如今的社會(huì )知識傳播的方式太多。書(shū)已經(jīng)不是唯一知識的載體。至于“書(shū)是人類(lèi)知識的階梯”這句名言的時(shí)代已經(jīng)過(guò)去了。每天各種微信公眾號推介的文章已經(jīng)夠看了。特別是專(zhuān)業(yè)微信公眾號內容特別豐富。所以我已經(jīng)不看書(shū)好多年了。

本文引用地址:http://dyxdggzs.com/article/201607/294163.htm

  最近事情比較少,我在單位的書(shū)架上發(fā)現了一本《》這本書(shū),常年閑置已經(jīng)落滿(mǎn)灰塵。我翻看了兩章后,由于這本書(shū)年代久遠,紙張已經(jīng)非常脆弱。所以我上網(wǎng)訂購了一本嶄新的。我以后的半個(gè)月我瀏覽這本書(shū)。只能是瀏覽470多頁(yè)的書(shū)要讀一遍還是非常困難的。 所以我打算做一點(diǎn)讀書(shū)筆記。

  以前我以為這是一本非常那與理解的書(shū),所以一直沒(méi)有去翻閱這本書(shū)?,F在覺(jué)得我的認識確實(shí)有點(diǎn)問(wèn)題。作者在給這本書(shū)命名還是非常講究的---《》。既然是“與”,那么在作者就介紹了兩個(gè)方面---&。

  在書(shū)的前5章介紹的是C語(yǔ)言的入門(mén)。因為C的基礎知識比較少,所以作者只使用了不到100頁(yè)的篇幅來(lái)介紹。包括“快速上手”、“基本概念”、“數據”、“語(yǔ)句”、“操作符和表達式”。雖然作者介紹的內容比較少,因為作者假設了讀者已經(jīng)對于語(yǔ)言有了基本了解。只是為了后面介紹指針做鋪墊。但是足夠入門(mén)學(xué)習了。因為作者的水平非常高,所以如果仔細品味定能事半功倍!

  其余18個(gè)章節的內容,除第14章《預處理器》、15《輸入/輸出函數》、16章《標準函數庫》與指針沒(méi)有明顯關(guān)系外,其余都是指針或者指針延伸。因為只是面比較擴散,梳理起來(lái)當然比較麻煩。因為作者認為指針知識一個(gè)單純的概念,指陣常用的方法即是指針和解應用,即 point與*point,這個(gè)非常容易理解。但是這個(gè)原理對編程工作效率是沒(méi)有多少提高的。因為這個(gè)強調了指針的值和解引用的值,即指針的地址和指針地址中值地址所存儲的值。這句話(huà)話(huà)來(lái)源于我的一位同事,讀起來(lái)比較繞口,但是圖解非常簡(jiǎn)單。

  int a = 102;

  int *Point ;

  Point = &a;

  其實(shí)很多初學(xué)者認為指針比較難于理解,是因為可能對int a = 102;這句理解也不夠全面。這也是C語(yǔ)言造成盲區----覆蓋了硬件某些特點(diǎn)。如果是使用匯編編程,那么每個(gè)變量的地址必須自己安排,必須時(shí)刻記住了哪些地址已經(jīng)被哪些變量使用。在C中編譯器會(huì )替用戶(hù)自動(dòng)安排。這就節省用戶(hù)很多精力,但是也會(huì )造成初學(xué)者不易理解。在這本書(shū)中作者介紹了“內存地址”、“值和類(lèi)型”。雖然內容很簡(jiǎn)單,但是如果深刻理解,隨后內容掌握將勢如破竹。

  其實(shí)int a = 102;這條語(yǔ)句完成了兩件事情,首先在RAM區劃分了兩個(gè)字節的空間。這個(gè)地址編碼可能是0x00 12。為什么說(shuō)“可能”。因為每個(gè)變量都有生命期,在他誕生時(shí)候系統只能根據當前RAM的使用情況劃分一個(gè)空間。這個(gè)地址只能當前空閑的某個(gè)地址。

  其次在0x0012這個(gè)地址中內容更新為102.如果。如果只劃分空間,那么空間的值將是不可預知的。應該為上次使用該空間時(shí)遺留的值。在這里我們就知道了a其實(shí)代表了一個(gè)地址,為了編寫(xiě)程序方便我們使用a來(lái)引用該地址空間和值。

  a = 105;這條語(yǔ)句是更新了a地址空間的值,更新為105。即0x0012地址空間的值現在為105。這里其實(shí)引出了另外兩個(gè)概念---左值和右值。在此可以更加明確此處這個(gè)概念。一般情況先左值提供地址,右值提供值。

  我們可以通過(guò)作者提供簡(jiǎn)單例子來(lái)理解左值和右值。

  int a = 102;

  int b = 500;

  a = b;

  我們來(lái)分析以上三條語(yǔ)句。int a = 102; 劃分地址0x0012,更新地址內容是102。

  Int b = 500; 劃分地址0x1005,更新地址內容是500。如下圖:

  a = b; 是非常簡(jiǎn)單的一條語(yǔ)句,這條語(yǔ)句執行的結果就是a地址空間的值更新為b地址空間的值,即500。其實(shí)可以按照兩個(gè)步奏來(lái)理解這條語(yǔ)句,首先,取b地址(0x00 15)空間的值500,其次將500存入a地址(0x00 12)空間。

  因為a、b都是變量,具有地址空間,a = b;是取b地址的值存入a地址。b提供值,a提供了空間。所以這也就明白了這個(gè)語(yǔ)句的正確讀法應該是“將b的值賦給a”。這是省略的讀法,擴充一下應該是“將b地址空間的值賦給a地址空間”。同理 b = a;也就非常好理解了。

  a = 5;這條語(yǔ)句是“將5賦給a”,也就是將a地址空間的值更新為5。a提供地址,5作為立即數提供了值。5 = a;顯然是一條錯誤的語(yǔ)句。因為a可以提供值,但是5是立即數提供不了地址。

  所以在C中變量都代表了在其生命周期內一個(gè)固定的地址,在有了地址的概念,指針也就不難理解。

  int a = 102;

  int *Point ;

  Point = &a;

  該條語(yǔ)句也就完成兩件事情,首先劃定地址(0x0050)空間,在該地址空間插入a的地址(0x0012)。其次在地址0x0050內存入a變量的地址,值為0x0012。

  所以Point也是一個(gè)地址----0x0050,其值為0x0012。0x0050這個(gè)地址我們可以不關(guān)心,就像我們使用a,我們從來(lái)不關(guān)心a的物理地址(0x0012)一樣。

  Point的值是0x0012,在這里0x0012也是一個(gè)普通的值,與100、200沒(méi)有任何區別。所以這條語(yǔ)句也完全正確。

  Point = a;或者Point = 100;

  但是這做樣做的意義何在,其實(shí)這種語(yǔ)句在實(shí)踐中非常少見(jiàn),而且還非常危險。

  我們不妨來(lái)分析一下。

  Point = a;是取a的值存入Point ,也就是取地址(0x00 12)中的值(102)存入Point(地址 0x0050)。

  Point = 100;將立即數100存入Point(地址0x0050)。但是這兩條語(yǔ)句意義如果在解引用中將非常危險。

  Point = a;執行結束后,* Point 的值將是地址102處的值,* Point=22;將改變地址102中的值為22。地址102也許是其他變量的地址空間,這會(huì )造成整個(gè)系統的混亂。程序運行出現不可控的異常。

  Point = 100;執行結束后,* Point 的值將是地址100處的值,* Point=22;將改變地址100中的值為22。同樣也會(huì )使系統出現紊亂,出現不可控的異常。所以非常危險。

  所以我們必須明白Point與*Point之間的關(guān)系。只要明白兩者之間的關(guān)系,簡(jiǎn)單使用指針甚至排除指針造成問(wèn)題也是可以的。

  理解C語(yǔ)言極其指針必須要有計算機系統的概念,只要有計算機簡(jiǎn)單模型思想。見(jiàn)瓶水之冰,而知天下之寒,魚(yú)鱉之藏也;嘗一臠肉,而知一鑊之味,一鼎之調。



關(guān)鍵詞: C 指針

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>