2

这是在堆栈和堆上分配指针的正确方法吗?如果不是,那么正确的方法是什么?

int a=7;
int* mrPointer=&a;
*mrPointer;

int** iptr; // iptr is on stack
*iptr=mrPointer; //not OK
int** iptr_h = new int*(); // iptr_h is on heap
*iptr_h=mrPointer;

感谢 Mat 的回答,现在我知道这是将其放入堆栈的正确方法:

int** iptr; // iptr is on stack
iptr=&mrPointer;

这在堆上:

int** iptr_h = new int*(); // iptr_h is on heap
*iptr_h=mrPointer;
4

2 回答 2

5

如果您想要一个指向最终指向a变量的指针的指针,那么您就是这样做的。

int a=7;
int* mrPointer=&a;
*mrPointer;

int** iptr; // iptr is on stack
iptr=&mrPointer;

编辑:澄清一下,在上面的代码中我*iptr = mrPointer;改为iptr = &mrPointer;.

这确实会通过堆指向同一个地方。

int** iptr_h = new int*(); // iptr_h is on heap
*iptr_h=mrPointer;

编辑根据评论进行解释:

人们还可以看到需要做这样的事情:

int* mrsPointer;
int** iptr = &mrsPointer;
*iptr = mrPointer;
于 2013-05-08T22:14:05.847 回答
1

当您使用mallocor为对象分配空间时new,它总是会在堆上结束。您可以使用alloca堆栈分配,但这明显更高级,不推荐使用。

于 2013-05-08T22:12:51.870 回答