我刚刚开始使用C ++,从更高级别的语言开始。对于我正在构建的东西,我分配空间,然后确定你拥有什么样的对象。它与下面的内容相似,但是下面的内容并不起作用 - 我希望能够恢复我的45,但我想到了一个内存位置。我搞砸了什么?
void *ptr;
int a = 45;
ptr = malloc(sizeof(int));
memcpy(ptr, &a, sizeof(int));
int *b;
b = (int*)ptr;
std::cout << &b;
答案 0 :(得分:1)
与评论一样:将std::cout << &b;
更改为std::cout << *b;
但是,如果你真的需要malloc,接下来可能会更容易:
int *ptr;
int a = 45;
ptr = static_cast<int*>(malloc(sizeof(int)));
*ptr = a; // memcpy(ptr, &a, sizeof(int)); can be done, but is not necessary.
std::cout << *ptr;
free(ptr);
更多C ++但不建议:
int ptr* = new int(a);
std::cout << *ptr;
delete ptr;
当指针具有明确的范围时更简单,因为您不必记得清理:
std::unique_ptr<int> ptr = std::make_unique(a);
std::cout << *ptr;
但是,指向原语的指针在C ++中几乎没有用处,所以最好完全避免使用它们,除非在某些库中需要它们。