C語言如何操作記憶體

2021-10-02 11:02:25 字數 1315 閱讀 8926

比如在c語言正   int a; a = 5; a += 4;     //    a = 9;

結合記憶體來解釋c語言語句的本質: int a = 5; // 編譯器幫我們申請了乙個int型別的記憶體格仔(長度是4位元組,位址是確定的,但是只有編譯器知道,我們是不知道的,也不需要知道),並且把符號a和這個格仔繫結。  a = 5; //編譯器發現我們要給a賦值,就會把這個值5丟到符號a繫結的那個記憶體格仔中。

a += 4; //編譯器發現我們要給a加值,a += 4 等效於 a = a + 4;編譯器會先把a原來的值讀出來,然後給這個值加4,再把加之後的和寫入a裡面去。

資料型別決定長度的含義:我們乙個記憶體位址(0 x30000000),本來這個位址只代表乙個位元組長度,但是實際上我們可以通過給他乙個型別(int),讓他有了長度(4),這樣這個代表記憶體位址的數字(0x30000000)就能標示從這個數字(0x300000000)開頭的連續的n(4)個位元組的記憶體格仔了(0x30000000 + 0x30000001 + 0x30000002 + 0x30000003)。

資料型別決定解析方法的含義:比如我有乙個記憶體位址(0 x30000000),我們就可以通過給這個位址不同的型別來指定這個記憶體單元格仔中二進位制數的解析方法。比如我:(int)0x30000000,含義就是(0x300000000)開頭的連續的n(4)個位元組的記憶體格仔了(0x30000000 + 0x30000001 + 0x30000002 + 0x30000003)共同儲存乙個int型別資料。

c語言中,函式就是一段**的封裝。函式名的實質就是一段**的首位址。所以說函式名的本質也是乙個記憶體位址。

關於型別(不管是普通變數型別 int float等,還是指標型別int*  float *等),只要記住:型別只是對後面數字或者符號(代表的是記憶體位址)所表徵的記憶體的一種長度規定和解析方法規定而已

int a;       //int a; 時編譯器會自動給a分配乙個記憶體位址,比如0x12345678

(int *)a;   //等價於(int *)0x12345678

c語言中的指標,全名叫指標變數,int a和int *p沒有任何區別,a和p都代表乙個記憶體位址比如(0x2000000),但是這個記憶體位址的長度和解析方法不同,a是int型所以a的長度是4位元組解析方法是按照int 規定來的,p是int*型別,所以長度是4位元組,解析方法是按照int*的規定來的。

C語言如何操作記憶體

c語言對記憶體位址的封裝 資料型別的本質含義 表示乙個記憶體格仔的長度和解析方法。關於型別,不管是普通變數型別 int,float等 還是指標型別 int float 等 只需要記住 型別只是對後面的數字或者符號 符號代表記憶體位址 的長度規定和解析方式規定而已。c語言中的指標全稱為指標變數,指標變...

C語言如何操作記憶體

譬如在c語言中 int a a 5 a 4 a 9 結合記憶體來解析c語言語句的本質 int a 編譯器幫我們申請了1個int型別的記憶體格仔 長度是4位元組,位址是確定的,但是只有編譯器知道,我們是不知道的,也不需要知道。並且把符號a和這個格仔繫結。a 5 編譯器發現我們要給a賦值,就會把這個值5...

C語言如何操作記憶體

1 用變數名來訪問記憶體 c語言對記憶體位址的封裝 資料型別 函式名 直接訪問記憶體 使用位址 資料型別 表示乙個記憶體格仔的長度和解析方法。記憶體編址的單位是乙個位元組 float 0 0的位址存的是指標,指標指向乙個float型別的數 short 0 0位址是short型別的變數,存的是shor...