C語言複習筆記 9

2021-07-30 10:20:32 字數 1060 閱讀 9019

計算機中所有的資料都必須放在記憶體中,不同型別的資料占用的位元組數不一樣,例如 int 占用4個位元組,char 占用1個位元組。為了正確地訪問這些資料,必須為每個位元組都編上號碼,就像門牌號、身份證號一樣,每個位元組的編號是唯一的,根據編號可以準確地找到某個位元組。

我們將記憶體中位元組的編號稱為位址(address)或指標(pointer)。位址從 0 開始依次增加,對於 32 位環境,程式能夠使用的記憶體為 4gb,最小的位址為 0,最大的位址為 0xffffffff。

一切都是位址

c語言用變數來儲存資料,用函式來定義一段可以重複使用的**,它們最終都要放到記憶體中才能供 cpu 使用。

資料和**都以二進位制的形式儲存在記憶體中,計算機無法從格式上區分某塊記憶體到底儲存的是資料還是**。當程式被載入到記憶體後,作業系統會給不同的記憶體塊指定不同的許可權,擁有讀取和執行許可權的記憶體塊就是**,而擁有讀取和寫入許可權(也可能只有讀取許可權)的記憶體塊就是資料。

cpu 訪問記憶體時需要的是位址,而不是變數名和函式名!變數名和函式名只是位址的一種助記符,當原始檔被編譯和鏈結成可執行程式後,它們都會被替換成位址。編譯和鏈結過程的一項重要任務就是找到這些名稱所對應的位址。

需要注意的是,雖然變數名、函式名、字串名和陣列名在本質上是一樣的,它們都是位址的助記符,但在編寫**的過程中,我們認為變數名表示的是資料本身,而函式名、字串名和陣列名表示的是**塊或資料塊的首位址。

由於關係運算子最終得到的是邏輯值(真或假),而不是具體的數字(計算機內部的運算器不是只可以進行算術運算,它也可以進行邏輯運算)。 判斷是真是假時比較的是關係運算子兩邊資料的二進位制**所表示的資料的大小。 於是關係運算子兩邊的資料型別可以不一樣(因為比較的是二進位制**所表示的資料的大小)。那麼,如果char型a對應的二進位制**所表示的資料大於float型b對應的二進位制**所表示的資料,就會輸出 真(表示a>b為真)(用來作條件判斷)。

1、如何深入理解指標、位址、關係運算子?

2、error c2446: 『==』 : no conversion from 『int *』 to 『int』

C語言 C語言複習筆記

為什麼要學c語言?1972年,美國貝爾實驗室的 d.m.ritchie 在b語言的基礎上最終設計出了一種新的語言,他取了bcpl的第二個字母作為這種語言的名字,這就是c語言。總所周知,任何東西的盛行都只是乙個階段,語言也是如此。但是,c語言是個例外,乙個矗立了半個世紀的語言,其中好壞,我想應該不難了...

c語言複習筆記

指標部分 1.指標型別說明 main 2.指標加減運算說明 指標的加減運算 只能對陣列指標進行,其他型別的指標變數是無意義的 int pt pt pa 1 陣列後移一位 pt pa 1 陣列前移一位 pt pa pt pa pt pa pt pt 在陣列中!兩個指標變數可以相減,但不能相加!int ...

C語言複習筆記

前言 本篇是個人複習基礎知識過程中遇到一些容易混淆的點在此記錄,如有錯誤請指正。如 int 9在的原碼為 0 0 0 1 1 0 0 0 9的補碼為 1 1 1 0 0 1 1 1 1 1 1 1 0 1 0 0 0 比如 int x y z 一般來說編譯器會把這三個變數分配到一段連續的記憶體裡。但...