You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将变量赋值给指针后,变量原内存地址会发生什么变化?

关于C++指针与变量内存的疑问解答

先看你给出的代码和思考:

using namespace std;
#include <iostream>

int main()
{
    int ref; // 一个位于未知内存地址的变量(我们称该地址为X)
    int *point; // 一个指针变量(我们称其内存地址为Y)

        ref = 3; // 将int型数值3存储在地址X处
        point = &ref; // 指针point现在存储了变量ref的地址X

        // 地址X发生了什么?现在存在已知和未知两个地址吗?

    cout << point << endl;  // 输出指针point的地址Y
    cout << *point << endl; // 输出指针point指向的内容(3)
    cout << ref << endl; // 从何处输出3?
    
    return 0;
}

针对你的疑问逐一解答:

1. 将变量赋值给指针后,变量原本的内存地址X会发生什么变化?

完全没有变化。point = &ref; 这个操作只是把变量ref的地址X复制到指针变量point里,本质是给point这个变量赋值,和ref本身的地址、存储的数值都没有任何关系。ref依然在地址X处,存储的数值还是3,没有被修改或移动。

2. cout输出ref的数值3是来自哪里?

直接来自ref所在的内存地址X。当你写cout << ref << endl;时,编译器会直接定位到ref的内存地址X,读取里面存储的int值3,然后输出。

3. 是否存在已知和未知两个地址的情况?

不存在。这里的两个地址X和Y都是确定的:

  • X是变量ref的内存地址,只是你一开始不知道它具体是多少,但程序运行时操作系统会给它分配一个明确的地址;
  • Y是指针变量point的内存地址,同样是程序运行时操作系统分配的明确地址。

你觉得“未知”只是因为你没有主动去输出或查看它们,但它们从变量被创建时就已经被分配了确定的内存地址。另外,cout << point << endl;输出的不是Y(point自己的地址),而是point里面存储的X(ref的地址)——这是你代码注释里的一个小误区。如果你想输出point自己的地址Y,应该写cout << &point << endl;。

内容的提问来源于stack exchange,提问作者Code N00b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:52:34