c語言中指標使用頻率是很高的,我們知道指標乙個特殊的變數,它的值是指向一塊記憶體位址
我寫了乙個簡單的c**
void test1()
編譯,然後ollydbg載入
我們一句句來
mov dword ptr ss:[ebp-0xc],0x0
將值0 放入棧空間位址 ss:[ebp-0xc] 實體地址為 00d3fbdc
對應c** int ***ptr_int = null;
mov dword ptr ss:[ebp-0x18],0x64
將值0x64 放入棧空間位址 ss:[ebp-0x18] 實體地址為 00d3fbd0 00000064
對應c** int i1 = 100;
這兩行** 先將 ss:[ebp-0x18] 位址賦給暫存器 eax,然後將eax值賦給位址 ss:[ebp-0x24]
00e41716 8d45 e8 lea eax,dword ptr ss:[ebp-0x18]
00e41719 8945 dc mov dword ptr ss:[ebp-0x24],eax
對應c**
int *ptr_1 = &i1; //一級記憶體位址空間偏移
這裡的 ss:[ebp-0x18]便是 整型變數i1的記憶體位址
這兩行** 做的事情同上,但注意位址變化了,這是是將位址 ss:[ebp-0x24] 賦給 ss:[ebp-0x30]
而 ss:[ebp-0x24]就是指標變數 int *ptr_1的值
00e4171c 8d45 dc lea eax,dword ptr ss:[ebp-0x24]
00e4171f 8945 d0 mov dword ptr ss:[ebp-0x30],eax
對應c**
int **ptr_2 = &ptr_1; //二級記憶體位址空間偏移
這兩行** 做的事情同上, 將二級指標變數位址 ss:[ebp-0x30] 賦給 ss:[ebp-0xc]**指標變數
00e41722 8d45 d0 lea eax,dword ptr ss:[ebp-0x30]
00e41725 8945 f4 mov dword ptr ss:[ebp-0xc],eax
對應c**
ptr_int = &ptr_2; //**記憶體位址空間偏移
將3級指標位址對應的解引用 取 出來。
00e41728 8b45 f4 mov eax,dword ptr ss:[ebp-0xc]
對應c**
int k = ***ptr_int;
從記憶體四區的角度來理解C 中的類
下屬專案 測試用例數量結論無 0試驗無1 先給出記憶體四區的概念 堆區 棧區 全域性區 區。詳情可自行搜尋,此處不作贅述。c 類中物件的成員變數和成員函式是分開儲存的。普通成員變數 儲存於物件 棧區或堆區 中,與struct變數有相同的記憶體布局和位元組對齊方式 會補齊 靜態成員變數 儲存於全域性區...
c語言 int轉char 深入理解C語言的指標
指標是c語言的乙個核心特色,它以一種統一方式對不同資料結構中的元素產生引用。對於新手來說,指標總是會帶來很多困惑,但其實指標的基本概念非常簡單。下面是一些指標和它們對映到機器 的關鍵原則。指標型別表明指標指向的是哪一類物件。比如 int ip char cpp 變數ip是乙個指向int型別物件的指標...
C語言基礎 C語言指標 3 指標的指標
上節課,我們講解了一些注意的事項以及指標的寫法,這節課我們來講解一下什麼叫做指標的指標.指標的指標,顧名思義就是指向指標的指標,當有乙個定義了乙個整型變數,定義乙個指標變數指向該整型變數,那麼指標變數存的位址就是整型變數的位址,而指標的指標指向該指標,那麼存的就是該指標的位址,下面我們看看示意圖 在...