假设已包含所有必要头文件,下述C++代码的输出结果是什么?
这段C++代码的输出结果是什么?
先把完整可运行的代码贴出来方便分析(已补全必要的头文件和命名空间):
#include <iostream> using namespace std; void position (int & C1, int C2=3) { C1 += 2; C2 += 1; } int main() { int P1 = 20, P2 = 4; position(P1); cout<<P1<<","<<P2<<endl; position (P2,P1); cout<<P1<<","<<endl; }
我们一步步拆解执行过程,搞清楚输出逻辑:
- 变量初始化:
main函数里先定义了两个整型变量,P1初始值为20,P2初始值为4。 - 第一次调用
position(P1):- 函数的第一个参数是引用传递(
int & C1),这意味着C1是P1的“别名”,对C1的修改会直接同步到P1上;第二个参数有默认值3,所以这里C2自动取默认值。 - 执行
C1 += 2后,P1从20变成22;执行C2 +=1只是修改了函数内部的局部变量C2(变成4),不会影响外部的P2——因为C2是值传递,传进来的只是副本。 - 第一次
cout输出:22,4。
- 函数的第一个参数是引用传递(
- 第二次调用
position(P2, P1):- 这次传了两个参数:第一个参数
P2作为C1的引用,第二个参数把P1当前的22传给C2。 - 执行
C1 +=2后,P2从4变成6;执行C2 +=1还是只修改局部变量C2(变成23),不会影响P1——毕竟C2是值传递,和P1没有关联。 - 第二次
cout输出:22,。
- 这次传了两个参数:第一个参数
最终的输出结果是:
22,4 22,
内容的提问来源于stack exchange,提问作者Wilfred
相关产品推荐
相关产品推荐

