我刚刚从C 开始,从更高级别的语言移动。对于我正在构建的东西,我正在分配空间,然后弄清楚您拥有的对象。这与以下相当,但下面不起作用 - 我希望能回到45岁,但我认为可以得到一个内存位置。我搞砸了?
void *ptr;
int a = 45;
ptr = malloc(sizeof(int));
memcpy(ptr, &a, sizeof(int));
int *b;
b = (int*)ptr;
std::cout << &b;
如注释中:将 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 中几乎没有用,因此最好完全避免它们,除非在某些库中需要时。