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:
a += 1:局部变量a从4变为5;b += 3:引用绑定的主函数c从5变为8;*c += 4:指针指向的主函数a从3变为7;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:
a += 1:局部变量a从3变为4;b += 3:引用绑定的主函数a从3变为6;*c += 4:指针指向的主函数a从6变为10;return a+b+(*c):局部a(4) + 主函数a当前值(10) + 主函数a当前值(10) = 24,即输出的total。
主函数后续输出:a=10 b=4 c=5,符合预期。这里要注意,引用和指针都指向主函数的同一个a,所以两次修改都会直接改变主变量,而函数内的局部a是独立副本,不影响主变量。
内容的提问来源于stack exchange,提问作者user21247827
相关产品推荐
相关产品推荐

