所以基本上我希望能够沿着这些方向做点什么
char *test1 = "hey";
int test2 = (int)test1;
char *test3 = (char*) &test2;
printf("%s", test3);
// have the output as hey
这甚至可能吗?我知道这不能正常工作,但我只是想知道是否有工作方法。是的我想使用char指针和整数,所以不,我不想使用字符串
答案 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);
}