2016-04-13 184 views
1

所以基本上我希望能夠繼續沿着這條(C++)鑄造INT爲char指針(INT是在INT形式字符)

char *test1 = "hey"; 
int test2 = (int)test1; 
char *test3 = (char*) &test2; 
printf("%s", test3); 
// have the output as hey 

做一些這甚至可能嗎?我知道這不能正常工作,但我只想知道是否有工作方法。是的,我想使用字符指針和整型,所以,不,我不想用字符串

+0

[C++:它是安全投指針爲int,後來回再次指針?](http://stackoverflow.com/questions/3567905/c-is-it-安全地轉換爲指針到int和稍後返回指針) –

+1

請注意'char * test1 =「hey」;'不應該編譯。一些編譯器有一個允許這樣做的擴展,但是你應該使用'char test1 [] =「hey」;'或'const char * test1 =「hey」;'或者更好一點'std :: string test =「hey」;' – NathanOliver

+1

**甚至有可能嗎?你已經寫了一些代碼來做一些可能或不可行的事情。你試圖完成什麼? –

回答

2
char *test1 = "hey"; 
int test2 = (int)test1; 
char *test3 = (char*) test2; // Note that the ampersand has been removed 
printf("%s", test3); 

可能會奏效,如果int和指針大小相同(他們往往是,但它不能保證)。

但是,當您指定test3時,您將採用test2的地址,而不是其值,這正是我認爲您的確應該做的。

+0

指針通常是_unsigned_整數。 –

+0

非常感謝! –

+0

如果您想給用戶名譽,請檢查答案爲「已接受」;) –

1

該代碼表示​​未定義的行爲,因此不正確。

然而,有一種方法可以合法地做你想做的事情。看評論內嵌的解釋:

#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); 
}