簡體   English   中英

C ++ reinterpret_cast

[英]C++ reinterpret_cast

在運行該程序時:

#include <iostream>
int main()
{
char *name = "abc";
int i = reinterpret_cast<int>(name);
std::cout<<i<<std::endl;
return 0;
}

我得到以下輸出:

4202656

這個數字代表什么? 它是一個內存地址嗎? 但是,內存地址是什么? 難道“ abc”不是作為字符數組存儲在內存中嗎?

謝謝。

未定義。 sizeof(int)可能不等於sizeof(char *)。 我不確定嚴格的別名規則是否也適用於此。

但是,實際上,假設它們的大小確實相等(大多數32位平台),則4202656將代表數組中第一個字符的地址。 我會這樣更干凈地做到這一點:

#include <iostream>
int main()
{
   const char *name = "abc"; // Notice the const. Constant string literals cannot be modified.
   std::cout << static_cast<const void*>(name) << std::endl;
}

它可能是字符“ a”的地址。
雖然我不認為這是可以保證的(即,一個int可能不足以容納該地址)。

您可能想看一下問題: 通過void *進行投射,而不是使用reinterpret_cast

簡短的答案是,它什么都可以。

這是第一個字符“ abc”的存儲地址,即“ a”。 因為數組是指向數組第一個值的指針。
如果執行cout << *(name++)通常會打印cout << *(name++) “ b”。

因此,當使用name ,您嘗試使用指向“ a”的地址

暫無
暫無

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

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