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

为何变量j的值为11?请解析这段C++代码的执行逻辑

解析你的C++代码为何输出j=11

我来帮你一步步拆解这段代码的执行过程,就能明白为什么j的最终值是11了:

首先先把你的代码贴出来方便对照:

#include <iostream>
using namespace std;
int main() {
    int i = 10, j = 20, k;
    int* p = &i;
    int* q = &j;
    *p += 1;
    p = &k;
    *p = *q;
    p = q;
    *p = i;
    cout << j << endl;
    return 0;
}

接下来逐行跟踪变量和指针的变化:

  • 初始化阶段:

    • int i = 10, j = 20, k;:i被赋值为10,j为20,k暂未初始化(后续会被赋值,不影响结果)
    • int* p = &i;:指针p指向i的内存地址,此时*p等价于i
    • int* q = &j;:指针q指向j的内存地址,此时*q等价于j
  • 执行*p += 1;:
    因为p指向i,所以这行代码等价于i += 1,i的值从10变为11

  • 执行p = &k;:
    指针p的指向改为k的内存地址,和i彻底解绑

  • 执行*p = *q;:
    *q对应j的值(20),*p对应k,所以这行是把k赋值为20,j的数值保持20不变

  • 执行p = q;:
    指针p现在和q指向同一个地址——j的内存地址,此时*p等价于j

  • 执行*p = i;:
    这里*p就是j,而i当前的值是11,所以这行等价于j = i,j的数值被修改为11

最后cout << j << endl;自然就输出11了。你之前预期其他数值,大概率是没注意到最后一步p = q后,*p就代表j了,随后把已经变成11的i值赋给了j,这才是改变j最终结果的关键步骤~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:36:14