所以基本上我希望能夠繼續沿着這條(C++)鑄造INT爲char指針(INT是在INT形式字符)
char *test1 = "hey";
int test2 = (int)test1;
char *test3 = (char*) &test2;
printf("%s", test3);
// have the output as hey
做一些這甚至可能嗎?我知道這不能正常工作,但我只想知道是否有工作方法。是的,我想使用字符指針和整型,所以,不,我不想用字符串
所以基本上我希望能夠繼續沿着這條(C++)鑄造INT爲char指針(INT是在INT形式字符)
char *test1 = "hey";
int test2 = (int)test1;
char *test3 = (char*) &test2;
printf("%s", test3);
// have the output as hey
做一些這甚至可能嗎?我知道這不能正常工作,但我只想知道是否有工作方法。是的,我想使用字符指針和整型,所以,不,我不想用字符串
char *test1 = "hey";
int test2 = (int)test1;
char *test3 = (char*) test2; // Note that the ampersand has been removed
printf("%s", test3);
可能會奏效,如果int
和指針大小相同(他們往往是,但它不能保證)。
但是,當您指定test3
時,您將採用test2的地址,而不是其值,這正是我認爲您的確應該做的。
指針通常是_unsigned_整數。 –
非常感謝! –
如果您想給用戶名譽,請檢查答案爲「已接受」;) –
該代碼表示未定義的行爲,因此不正確。
然而,有一種方法可以合法地做你想做的事情。看評論內嵌的解釋:
#include <cstddef>
#include <cstdint>
#include <cstdio>
int main()
{
// string literals are const
const char *test1 = "hey";
// intptr_t is the only int guaranteed to be able to hold a pointer
std::intptr_t test2 = std::intptr_t(test1);
// it must be cast back to exactly what it was
const char *test3 = reinterpret_cast<const char*>(test2);
// only then will the programs behaviour be well defined
printf("%s", test3);
}
[C++:它是安全投指針爲int,後來回再次指針?](http://stackoverflow.com/questions/3567905/c-is-it-安全地轉換爲指針到int和稍後返回指針) –
請注意'char * test1 =「hey」;'不應該編譯。一些編譯器有一個允許這樣做的擴展,但是你應該使用'char test1 [] =「hey」;'或'const char * test1 =「hey」;'或者更好一點'std :: string test =「hey」;' – NathanOliver
**甚至有可能嗎?你已經寫了一些代碼來做一些可能或不可行的事情。你試圖完成什麼? –