【CSP-J 2025·第 10 题】 考虑以下 C++ 函数,在 main 函数调用 solve 后,x 和 y 的值分别是( )。
void solve(int &a, int b) {
a = a + b;
b = a - b;
a = a - b;
}
int main() {
int x = 5, y = 10;
solve(x, y);
}
A. 5, 10 B. 10, 5 C. 10, 10 D. 5, 5
执行下面的代码后,x 的值是( )。
void f(int a) { a += 3; }
int x = 7;
f(x);
A. 7 B. 10 C. 3 D. 无法确定
执行下面的代码后,x 的值是( )。
int x = 7;
int y = 12;
int &r = x;
r = y;
A. 7 B. 12 C. y 的地址 D. r 改为 y 的别名,x 不变
下列引用定义正确的是( )。
A. int &r; B. int x=3; int &r=x; C. int &r=nullptr; D. int x=3; int &r=&x;
已知 int x=3; const int &r=x;,下列说法正确的是( )。
A. 可以执行 r=5 修改 x B. r 可以随时改绑到另一个变量 C. 不能通过 r 修改所绑定的值 D. r 没有绑定任何对象
主题程序阅读
阅读下面的程序:
#include <iostream>
using namespace std;
void adjust(int a, int &b, int *c) {
a += 1;
b += a;
*c = b - a;
}
int main() {
int x = 3, y = 5, z = 8;
adjust(x, y, &z);
cout << x << ' ' << y << ' ' << z << endl;
return 0;
}
在 adjust 中执行 a += 1; 后,形参 a 和主函数变量 x 的值分别是( )。
A. 4, 4 B. 4, 3 C. 3, 4 D. 3, 3
执行 b += a; 后,主函数变量 y 的值是( )。
A. 5 B. 8 C. 9 D. 13
程序最终输出( )。
A. 4 9 5 B. 3 9 5 C. 3 5 8 D. 4 5 4
暂停 · 先完成并提交
先标形参类型,再追数值
请先独立完成全部题目,并到玄武 OJ 提交今日答案。
值参数画副本,引用参数画别名,指针参数画箭头;
函数结束后只保留外部变量的变化;
提交后再向下查看完整题目和解析。
继续向下:每道题的完整题目、答案与解析
答案与解析
下面按“题目 → 答案 → 解析”的顺序订正。
第 1 题|引用参数与值参数
【CSP-J 2025·第 10 题】 考虑以下 C++ 函数,在 main 函数调用 solve 后,x 和 y 的值分别是( )。
void solve(int &a, int b) {
a = a + b;
b = a - b;
a = a - b;
}
int main() {
int x = 5, y = 10;
solve(x, y);
}
A. 5, 10 B. 10, 5 C. 10, 10 D. 5, 5
答案:C 解析:a 是 x 的引用,b 只是 y 的副本。三句依次得到:a=15,b=5,a=10。因此 x 变为 10;函数中的 b 虽变为 5,但 y 仍是 10。
第 2 题|值传递不改实参
执行下面的代码后,x 的值是( )。
void f(int a) { a += 3; }
int x = 7;
f(x);
A. 7 B. 10 C. 3 D. 无法确定
答案:A 解析: 形参 a 是 x 的副本。函数内部只把副本从 7 改为 10,x 不受影响。
第 3 题|引用不能重新绑定
执行下面的代码后,x 的值是( )。
int x = 7;
int y = 12;
int &r = x;
r = y;
A. 7 B. 12 C. y 的地址 D. r 改为 y 的别名,x 不变
答案:B 解析:r 已经是 x 的别名,r=y 等价于 x=y,所以 x 变为 12。赋值不会使引用重新绑定。
第 4 题|引用必须初始化
下列引用定义正确的是( )。
A. int &r; B. int x=3; int &r=x; C. int &r=nullptr; D. int x=3; int &r=&x;
答案:B 解析: 普通左值引用必须在定义时绑定同类型对象。A 未初始化,C 不能把空指针当作整数对象,D 的 &x 是地址而不是 int 对象。
第 5 题|常量引用
已知 int x=3; const int &r=x;,下列说法正确的是( )。
A. 可以执行 r=5 修改 x B. r 可以随时改绑到另一个变量 C. 不能通过 r 修改所绑定的值 D. r 没有绑定任何对象
答案:C 解析:r 绑定了 x,但 const 限制了通过这个引用进行修改。引用同样不能重新绑定。
第 6~8 题共用程序|三种参数放在一起
阅读下面的程序:
#include <iostream>
using namespace std;
void adjust(int a, int &b, int *c) {
a += 1;
b += a;
*c = b - a;
}
int main() {
int x = 3, y = 5, z = 8;
adjust(x, y, &z);
cout << x << ' ' << y << ' ' << z << endl;
return 0;
}
第 6 题|副本与实参
在 adjust 中执行 a += 1; 后,形参 a 和主函数变量 x 的值分别是( )。
A. 4, 4 B. 4, 3 C. 3, 4 D. 3, 3
答案:B 解析:a 是值参数,初值为 3 的副本。执行后副本 a=4,实参 x 仍为 3。
第 7 题|引用参数修改实参
执行 b += a; 后,主函数变量 y 的值是( )。
A. 5 B. 8 C. 9 D. 13
答案:C 解析:b 是 y 的引用,此时 a=4,所以 b=5+4=9,主函数中的 y 同步变为 9。