[英]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.