c語言中通過指針將數值賦值到制定內存地址


1.一種直觀的方法

假設現在需要往內存0x12ff7c地址上存入一個整型數0x100。我們怎么才能做到呢?

我們知道可以通過一個指針向其指向的內存地址寫入數據,那么這里的內存地址0x12ff7c其本質不就是一個指針嘛。所以我們可以用下面的方法:

1 int *p = (int *)0x12ff7c;
2 *p = 0x100;

需要注意的是將地址0x12ff7c賦值給指針變量p的時候必須強制轉換。

 

1.1 為什么在此處,我們敢往0x12ff7c這個地址賦值呢?

  至於這里為什么選擇內存地址0x12ff7c,而不選擇別的地址,比如0xff00等。這僅僅是為了方便在Visual C++ 6.0上測試而已。如果你選擇0xff00,也許在執行*p = 0x100;這條語句的時候,編譯器會報告一個內存訪問的錯誤,因為地址0xff00處的內存你可能並沒有權力去訪問。既然這樣,我們怎么知道一個內存地址是可以合法的被訪問呢?也就是說你怎么知道地址0x12ff7c處的內存是可以被訪問的呢?其實這很簡單,我們可以先定義一個變量i,比如:

int i = 0;

變量i所處的內存肯定是可以被訪問的。然后在編譯器的watch窗口上觀察&i的值不就知道其內存地址了么?這里我得到的地址是0x12ff7c,僅此而已(不同的編譯器可能每次給變量i分配的內存地址不一樣,而剛好Visual C++ 6.0每次都一樣)。你完全可以給任意一個可以被合法訪問的地址賦值。得到這個地址后再把“int i = 0;”這句代碼刪除。一切“罪證”銷毀得一干二凈,簡直是做得天衣無縫。

 

2.另一個方法

 

除了這樣就沒有別的辦法了嗎?未必。我們甚至可以直接這么寫代碼:

*(int *)0x12ff7c = 0x100;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM