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

为何调用指定C++函数后变量a的值为2而非3或4?

为什么调用f(a,a)后变量a的值是2?

先看你的代码:

#include <iostream>
using namespace std;
void f(int &x, int &y)
{
    x = 1;
    x = x + y;
}
int main()
{
    int a = 3;
    f(a, a);
    cout<<a;
    return 0;
}

结果分析

核心原因是函数f的两个参数都是引用类型(int &),这意味着x和y并不是a的副本,而是a的别名——它们指向同一块内存地址,修改其中任何一个,本质都是修改a本身。

我们一步步拆解执行流程:

  1. 初始状态:a = 3。
  2. 调用f(a,a):x和y同时绑定到a,此时x和y都代表a。
  3. 执行x = 1;:因为x是a的引用,所以a的值被直接改成1。
  4. 执行x = x + y;:此时x和y对应的都是已经变成1的a,所以计算的是1 + 1 = 2,再把结果赋给x(也就是a),最终a的值为2。

引用参数函数的工作原理

  • 引用作为函数参数时,不会为实参创建新的副本,而是直接关联到实参的内存位置。
  • 如果多个引用参数绑定到同一个实参,那么对任意一个引用的修改都会实时同步到实参,后续其他引用访问的都是修改后的实参值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 06:22:02