(c ++)将int转换为char指针(int是int形式的字符)

时间:2016-04-13 13:01:33

标签: c++ pointers

所以基本上我希望能够沿着这些方向做点什么

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

这甚至可能吗?我知道这不能正常工作,但我只是想知道是否有工作方法。是的我想使用char指针和整数,所以不,我不想使用字符串

2 个答案:

答案 0 :(得分: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的地址而不是它的值,这是我认为你真的应该做的。

答案 1 :(得分: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);
}