2015-05-26 201 views
0
string * sptemp = (string *) 0x000353E0; 

這段代碼究竟想說什麼?C++字符串和指針混淆

我知道在左側我們定義了一個字符串指針,但我無法理解正確的部分。

+9

它非常尖叫未定義的行爲。 –

+0

右側是給定在左側的對象的*值*。就像'int n = 10;'一樣。 –

+0

與它相同:string * sptemp; sptemp = 0X000353E0 –

回答

4

這意味着取一個數字值,將其轉換爲一個指針,並將該值指向該地址,然後使用該值初始化變量sptemp

如果該地址的內存包含有效的string對象,則可以使用指針訪問它。否則,試圖這樣做會導致未定義的行爲。

4
string * sptemp = (string *) 0x000353E0; 

是什麼代碼究竟想說什麼?

它說,把位於地址0x000353E0數據,就好像它擁有string和地址賦給變量sptemp。之後可以通過指針變量sptemp訪問數據。

+2

它實際上並沒有說訪問,是嗎?它只是說把它當作。 –

+0

@EvdzhanMustafa,通過賦值給變量'sptemp',你可以通過它訪問該地址的值。 –

0

這些評論大多是正確的,但不完全。我們實際上並不知道這個字符串是std :: string。這可能是該字符串是一些內存映射硬件,其OP嵌入式SBC上的地址由硬件0x000353E0定義。在這種情況下,這是完全明智的,人們總是在做什麼。指針「string * sptemp」被設置爲指向硬件接口。

但這可能是無稽之談。