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

C++函数中整数指针与引用的正确使用及代码推演困惑

C++整数指针与引用使用及代码推演解析

一、C++中整数指针与引用的正确使用

  • 值传递(普通参数):函数参数是原变量的副本,函数内修改仅作用于局部变量,不会影响原变量。比如int f(int a)中的a,就是主函数对应变量的拷贝。
  • 引用传递(int &b):参数是原变量的别名,函数内对引用变量的修改直接作用于原变量,无需额外解引用操作。
  • 指针传递(int *c):参数是原变量的内存地址,函数内必须通过*指针变量的方式访问和修改原变量的值,需确保指针指向有效内存(避免野指针)。

二、代码分步解析

给定代码的预期输出:

total: 20
a= 7 b= 4 c= 8
total: 24
a= 10 b= 4 c= 5

第一次函数调用:f(b,c,&a)(主函数初始值a=3, b=4, c=5)

先明确参数绑定关系:

  • 函数f的int a:接收主函数b的值(4),属于值传递,是独立局部变量;
  • 函数f的int &b:绑定主函数的c,是主函数c的引用;
  • 函数f的int *c:指向主函数a的内存地址。

分步执行函数f:

  1. a += 1:局部变量a从4变为5;
  2. b += 3:引用绑定的主函数c从5变为8;
  3. *c += 4:指针指向的主函数a从3变为7;
  4. return a+b+(*c):局部a(5) + 主函数c当前值(8) + 主函数a当前值(7) = 20,这就是输出的total。

主函数后续输出:a=7 b=4 c=8,与预期一致。你之前算错返回值,大概率是混淆了函数内局部变量a和主函数原变量a的关系。

第二次函数调用:f(a,a,&a)(主函数重置为a=3, b=4, c=5)

参数绑定关系:

  • 函数f的int a:接收主函数a的值(3),是独立局部变量;
  • 函数f的int &b:绑定主函数的a;
  • 函数f的int *c:指向主函数的a。

分步执行函数f:

  1. a += 1:局部变量a从3变为4;
  2. b += 3:引用绑定的主函数a从3变为6;
  3. *c += 4:指针指向的主函数a从6变为10;
  4. return a+b+(*c):局部a(4) + 主函数a当前值(10) + 主函数a当前值(10) = 24,即输出的total。

主函数后续输出:a=10 b=4 c=5,符合预期。这里要注意,引用和指针都指向主函数的同一个a,所以两次修改都会直接改变主变量,而函数内的局部a是独立副本,不影响主变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:25:43