GESP 四级 · GESP 202509 C++ 四级 第 8 题

选择题 · 答案 B

← 整套速查表 GESP 四级 全部真题

题目

运行如下代码会输出( )。

struct Cat {
    string name;
    int age;
};

void birthday(Cat& c) {
    c.age++;
}

int main() {
    Cat kitty{"Mimi", 2};
    birthday(kitty);
    cout << kitty.name << " " << kitty.age;
}
答案:B

解题思维

答案B。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。

常见错误

指针和数组追踪时画内存布局图可以大大简化理解。

详细解析(节选)

【考点】引用传参|结构体成员访问

【考纲定位】本题属于 GESP 四级 C++ 基础语法模块,命题人专门卡住"引用传参"这个薄弱环节。绝大多数考生看到 void birthday(Cat& c) 会下意识按值传参理解,却忽略了引用就是别名,函数内修改 c.age 必然改变原对象 kitty.age。

【解题思维】第一反应定位参数类型:Cat& c 是引用而非值,birthday(kitty) 把 kitty 的地址绑定给 c,因此 c.age++ 直接作用于 kitty.age。初始 age=2,调用后变为 3,输出语句直接打印 kitty.name 与 kitty.age,故为 "Mimi 3"。此类题通法:看到引用参数先确认"是否修改原对象",无论函数名如何,只要参数是引用且函数内修改成员,外部对象必变。

【陷阱拆解】A 项"Mimi 2"是典型的按值传参陷阱,把引用误作拷贝;C、D 项"kitty 3/2"偷换概念,把对象名当成成员名,混淆 kitty.name 与 kitty 本身;题目最阴险的是 string 类型,考生容易纠结字符串操作,实则只是用来迷惑注意力。只背结论不读参数类型,必掉坑。

【反命题思维】若把 Cat& c 改为 Cat c(按值传参),答案会变成 "Mimi 2";若把输出改为 cout << c.name << " " << c.age; 则答案仍是 "Mimi 3" 但考察点变成引用别名。刷到类似题先问:"参数是引用还是值?修改的是原对象还是副本?" 一句话定位本质。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断