結合記憶體來解析C語言語句的本質

2021-10-12 07:25:11 字數 959 閱讀 3956

int a:編譯器幫我們申請了乙個int型別的記憶體格仔(長度是4位元組,位址是確定的,但是只有編譯器知道,我們是不知道的,也不需要知道) ,並且把符號a和這個格仔繫結。

a=5:編譯器發現我們要給a賦值,就會把這個值5丟到符號a繫結的那個記憶體格仔中

a+=4:編譯器發現我們要給a加值, a += 4等效於a=a +4,編譯器會先把a原來的值讀出來,然後給這個值加4,再把加之後的和寫入a裡面去,最後這個格仔裡面儲存的內容就是9。

c語言中資料型別的本質含義,是表示乙個記憶體格仔的長度和解析方法。

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

資料型別決定解析方法的含義是:假如有乙個記憶體位址(0x30000000) ,我們可以通過給這個記憶體位址不同的型別來指定這個記憶體單元格仔中二進位制數的解析方法。如int的含義就是0x3000000 + 0x30000001 + 0x30000002 + 0x30000003這四個位元組連起來共同儲存的是乙個int型資料;那float含x就是0x300000000 + 0x30000001 +0x30000002 + 0x30000003這四個位元組連起來共同儲存的是乙個float型資料。int a;時,編譯器會自動分配一塊記憶體出來,假設這裡是32位作業系統,那麼int就是4個位元組,如果這塊記憶體的第乙個位元組(首位元組)位址為0x12345678,編譯器會將變數名a與這個首位元組位址繫結,對a進行訪問與操作,實際上就是向0x12345678開始的4個位元組空間進行讀寫操作。

c語言語法 c程式的記憶體分割槽

區 text段 資料區 靜態全域性區 bss data 常量區 rodata 堆區 heap 棧區 stack 存放程式二進位制 編譯時已經確定,通常為唯讀儲存區 資料區分為靜態全域性區和常量區 靜態 全域性 區儲存全域性變數和靜態變數,靜態區又可分為 常量區 rodata段 儲存const修飾的全...

合法的c語言語句是 C語言第二章《C語言基本語法》

在程式語言中,識別符號是使用者程式設計時使用的名字,變數 常量 函式 語句塊都有名字。是用來標識某個實體的乙個符號,是對變數名 函式名 標號和其他各種使用者定義的物件命名。c 識別符號是用來標識變數 函式,或任何其他使用者自定義專案的名稱。乙個識別符號以字母 a z 或 a z 或下劃線 開始,後跟...

解析c語言switch中break語句的具體作用

問題 break在for迴圈 while迴圈等迴圈流程控制中起的作用是停止執行bregcpmdmxgjeak後面的語句,跳出本次迴圈,並跳出該迴圈控制體 在switch條件選擇中,沒有了迴圈控制,break又起什麼作用呢?解決辦法 1.switch語句的執行流程是 首先計算switch後面圓括號中表...