《C與指標》讀書筆記
第六章
6.1. 記憶體和地址
獲得一個值的地址,就能根據這個地址獲得這個值,但如果程式設計時直接使用地址訪問值,是非常繁瑣的,所以高階語言使用名字而非地址訪問記憶體的位置,這些名字就是我們程式設計者所使用的變數。變數名和記憶體位置之間的關聯是編譯器提供的,為程式設計者所使用。而電腦硬體依舊使用地址訪問記憶體位置。
6.4. 間接訪問操作符
通過指標訪問他所指向的記憶體地址稱為“間接訪問”或“解引用指標”,用於進行間接訪問的操作符是單目運算子*。
比如指標p的值是100,即它儲存的地址(指向的地址)是100,對p使用間接訪問操作符*時,就是訪問記憶體地址100並察看那裡存放的值。如果記憶體100存放的值是112,那麼*p 就等於112.
6.6. NULL指標
NULL指標作為一個特殊的指標變數,表示不指向任何東西。注意NULL是一個指標變數而不是一個值。要使得一個指標成為NULL指標,可以賦值以0.
對指標進行解引用操作(即“*”)可以獲得他所指向的值,但NULL指標並不指向任何東西,因此對NULL進行解引用操作是非法的(但機器未必會做出提醒),在對指標進行解引用操作時必須判斷它是否為NULL指標。
6.8. 指標、間接訪問和變數
&a是變數a的地址,是一個指標常量。對於指令*&a = 25,先通過&獲得a的地址,再對a的地址進行解引用操作,並賦值25,實際上等效於a = 25.
6.9. 指標常量
假設變數a的地址是100,那麼語句*100 = 25的功能是什麼?把25賦值給a?
這是錯誤的!這條語句實際上是非法的,因為編譯器會把“100”看做是一個普通的整型數值而非一個地址!而間接訪問操作符*只能用於指標型別表示式身上。如果確實像把25儲存到地址100中(實際上是儲存到以地址100為開端的一片記憶體區域中,這片記憶體區域的大小視乎“25”所屬的數值型別,比如25為int型的話,就是4),就要進行強制型別轉換。以下指令是合法的。
*(int*)100 = 25;
上述語句將100由“整型”轉為“指向整型的指標”,這樣對它進行間接訪問就是合法的了。
>>未完
相關文章
- 《C缺陷與陷阱》讀書筆記筆記
- C陷阱與缺陷--讀書筆記筆記
- 《讀書與做人》讀書筆記筆記
- C語言指標筆記C語言指標筆記
- C++筆記(11) 智慧指標C++筆記指標
- C指標與記憶體指標記憶體
- C++讀書筆記:字串C++筆記字串
- 《Effective C#》讀書筆記C#筆記
- 《Effective C++》讀書筆記C++筆記
- C語言學習筆記:結構體與指標C語言筆記結構體指標
- 【C#學習筆記】指標使用C#筆記指標
- 效能與RAC 讀書筆記筆記
- 《More Effective C#》讀書筆記C#筆記
- 劍指Offer讀書筆記(持續更新中)筆記
- 黑客與畫家讀書筆記黑客筆記
- C語言深度剖析——讀書筆記C語言筆記
- C++中的可見性 指標 筆記C++指標筆記
- 讀書筆記...筆記
- 讀書筆記筆記
- 指標學習筆記指標筆記
- 《ES6 標準入門》讀書筆記筆記
- 《深度探索C++物件模型》讀書筆記C++物件模型筆記
- 《從陷阱中學習C/C++》讀書筆記C++筆記
- C++中的指標與引用詳細解讀C++指標
- C與指標 第六章 指標指標
- 《Effective C++》第4章 設計與宣告(2)-讀書筆記C++筆記
- 《Effective C++》第4章 設計與宣告(1)-讀書筆記C++筆記
- Cucumber讀書筆記筆記
- 散文讀書筆記筆記
- HTTP 讀書筆記HTTP筆記
- CoreJava讀書筆記-------Java筆記
- flask讀書筆記Flask筆記
- Vue讀書筆記Vue筆記
- MONGODB 讀書筆記MongoDB筆記
- Qt讀書筆記QT筆記
- Node讀書筆記筆記
- SAP讀書筆記筆記
- YII讀書筆記筆記