簡體   English   中英

如何更改指針在 C++ 中指向的地址

[英]How to change the address a pointer is pointing to in C++

在嘗試使用指針時,我有了將地址更改為指針的想法。 我嘗試了以下方法:

int* pointer; 
&pointer = 0x28ff0d; //To point to an empty space in memory

但這拋出了一個錯誤(詳細信息:(此處)在第 2 行,左值需要作為左操作數 [...]),所以我想這是不可能的? 我不是要創建一個空指針,而是要更改內存地址

出於顯而易見的原因,將指針設置為硬編碼地址是一個壞主意。 但是,您可以通過reinterpret_cast<>將地址分配給您分配給它的類型來實現,如下所示:

int * pointer = reinterpret_cast<int *>(0xDEADBEEF);

或者

int * pointer = &some_int;
. . .
pointer = reinterpret_cast<int *>(0xDEADBEEF);

請注意,在這種情況下取​​消引用pointer是未定義的行為......但這樣做可能對調試釋放后使用之類的事情仍然有用,其中像 0xDEADBEEF 這樣的標記值會清楚地表明您已經釋放了該內存。

顯然,更改您指向的地址的更常見、有用和安全的情況是獲取不同(真實)數據的地址:

int * pointer = &some_int;
int new_val = 1234;
pointer = &new_val; // *pointer is now 1234

你永遠不能改變變量的地址。 因此,無論 T 是什么(無論是像 int 或 double 這樣的內在類型、結構、指針還是數組,C++ 中都禁止以下內容:

T var;
&var = anything;   // WRONG! &var is not a lvalue

左操作數所需的錯誤左值意味着您只能分配給可以接收新值的東西,而變量的地址則不能。

指針是一個變量。 任何變量都有它所在的地址。 因此,如果您已經聲明了一個變量,例如int x; ,然后&x是該變量所在的地址。

指針是駐留在某處的變量,但除此之外它還有一個值,該值恰好是某個其他變量的地址。 所以如果你已經聲明了一個指針int* x; , 已經向它寫入了一些東西,那么x將代表您寫入它的某個地址,而*x將是指針指向的值。

所以你的語法錯誤是在你應該使用變量名的地方使用& ,而沒有& 清楚這一點后,請務必閱讀其他答案,這些答案解釋了您的代碼的進一步問題。

int* pointer; &pointer = 0x28ff0d;

這將引發錯誤,因為&pointer不是左值。 在賦值運算符的左側必須有一個左值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM