回答
你只需要施展它是一個指針:
int *pointerToTwo = (int *)2;
然後,你可以解引用照常:
int valueAtTwo = *pointerAtTwo;
通常的原因,你會做這種事情是訪問存儲器映射的寄存器,其中,使用所述volatile
關鍵字的情況下,建議:
int valueAtTwo = *(volatile int *)2;
或者,也許堅持所有鑄造成宏來使你的代碼更易於閱讀:
#define intValueAt(x) (*(volatile int)(x))
int valueAtTwo = intValueAt(2);
旁白:2
是幾乎可以肯定不是這個用例的有效地址。我剛剛使用它是因爲你在你的問題中引用了它。
請注意,這樣做需要額外的指針/內存地址格式的知識。在某些情況下,從0開始並且從那裏繼續存儲的內存不是一個簡單的例子。此外,您可以嘗試訪問受保護的讀寫訪問權限的內存。您可以嘗試寫入ROM。你可以弄髒內存映射的IO設備。這就是說,它可以是非常有用的,當負責任地使用。 – 2013-03-18 16:51:25
void* pMemory = (void*)2L;
這將創建一個void*
(空指針),並將其地址設置爲2
。
請注意,如果您的進程不應該訪問該內存(您無權讀取該內存),則可能會導致各種錯誤。另外請注意,你不應該隨機讀取地址。使用指針直接訪問內存位置很容易出錯。這就是爲什麼軟件開發人員開發出如此多的技術來幫助我們在正確的環境下僅使用正確的預期數據類型訪問正確的內存地址。
您可以只投它爲int *獲取一個指針,就像這樣:
int *ptr = (int *)2;
然後你就可以通過正常的*運算符訪問2的內容。
int i = *ptr;
會做你想做的。
但是,值得注意的是,在實踐中,上面的'i'不是RAM的第二個單元格的實際內容。這是因爲在用戶模式的應用程序中,'2'總是被視爲虛擬地址,並被轉換(在運行時)爲物理地址。在類Unix操作系統中,用戶模式代碼通常沒有辦法做這樣的事情。
- 1. c中的訪問內存地址#
- 2. CUDA:全局內存訪問地址
- 3. 無法訪問內存地址C++
- 4. 訪問直接內存地址,我們可以直接訪問任何內存地址?
- 5. 對leal感到困惑。它也訪問內存地址的內容嗎?
- 6. 如何使用c#訪問內存中的地址?
- 7. C內存地址問題
- 8. 內存地址
- 9. 如何從Swiffy轉換閃存本地訪問動畫內容?
- 10. 訪問內容
- 11. 訪問內容
- 12. 我可以看看訪問特定地址的內容嗎?
- 13. Ubuntu的GDB不能在地址訪問內存時tryint在$查看內存ESP
- 14. 訪問已刪除的內存
- 15. 機器內存地址的內存地址? (C語言)
- 16. 如何檢索地址簿內容?
- 17. C++內存地址?
- 18. 如何以編程方式訪問內容源的起始地址?
- 19. 通過IP地址限制網頁內容訪問
- 20. CoreData EXC_BAD_ACCESS,無法訪問地址處的內存KERN_PROTECTION_FAILURE:0x00000000
- 21. GDB不能在$ EBP的地址訪問內存
- 22. 訪問直接內存地址並獲取C++中的值
- 23. 在ruby中訪問對象的內存地址?
- 24. 無法從gethostname訪問IP地址的內存
- 25. 如何僅顯示內容訪問的一種內容類型
- 26. 如何訪問WKWebView中的WKWebView內容?
- 27. 如何訪問內容的鏈接?
- 28. 如何訪問的詞典內容
- 29. 如何訪問目錄的內容
- 30. 變量的內存地址
'int * x =(int *)2;'? – Pubby 2013-03-18 16:47:18
關於編輯:您可以通過點擊問題下方的「編輯X之前」鏈接來訪問修訂歷史記錄。如果你覺得合適,你可以回滾到另一個版本。但是,請注意,對你的問題進行預處理並且對其假定的愚蠢性發表評論並不是很有用。 – Quentin 2016-12-26 15:03:01
@Quentin。評論是關於在未經我的同意的情況下改變我的問題的愚蠢,也沒有必要這樣做。 – stian 2016-12-26 21:22:02