C++指针动态分配地址疑问:为何指向变量地址不同?
问题解答
你混淆了「值拷贝」和「指针指向变量地址」这两个操作的区别,咱们一步步理清楚:
- 首先,
int* pointer = new int;这行代码做的是:在堆内存里申请了一块能存int类型数据的空间,然后把这块空间的地址存在pointer这个指针变量里。此时pointer指向的是堆上的全新地址,和random_number没有关联。 - 然后
*pointer = random_number;这行是值拷贝操作:它把random_number变量里存储的数值,复制了一份,然后放到pointer指向的那块堆内存空间里。整个过程没有改变pointer的指向,只是修改了它指向的内存里的内容。 - 如果你想让
pointer直接指向random_number的地址,那应该写:
这时候pointer = &random_number; // 注意:这样之前用new申请的堆内存会泄漏,记得先deletepointer保存的就是random_number的地址,二者地址就一致了。
简单总结:你现在的代码是把变量的值复制到指针指向的内存,不是让指针指向变量本身,所以地址自然不一样。
内容的提问来源于stack exchange,提问作者Jose
相关产品推荐
相关产品推荐

