GESP 四级 · GESP 202406 C++ 四级 第 1 题

选择题 · 答案 B · 考点:函数

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

题目

下列代码中,输出结果是( )

#include<iostream>
using namespace std;
int func(int x,int y)
{
    int a=x,b=y;
    int t;
    t=a;
    a=b;
    b=t;
    cout<<a<<" "<<b<<" ";
}
int main()
{
    int c,d;
    c=12;
    d=24;
    func(12,24);
    cout<<c<<" "<<d<<endl;
}
答案:B

考点

函数

解题思维

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

常见错误

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

详细解析(节选)

【考点】参数传递方式|局部变量作用域|函数返回值

🎯 考纲定位 GESP 四级《C++基础编程》第3章函数,考查参数传递方式与局部变量作用域。命题人故意用swap陷阱卡住40%考生——误以为函数内交换会影响主函数变量。

🧠 解题思维 看函数声明func(int x,int y):参数是值传递,调用时x=12,y=24是局部副本。函数内a,b只是别名,交换a,b只改变局部变量。故函数内cout<<a<<" "<<b输出24 12。返回后main中c,d仍是原值12,24,其输出12 24。最终顺序24 12 12 24。

🪤 陷阱拆解 选项A/C都错在误判作用域:以为函数内交换影响主函数变量。选项D是完全没理解值传递,把输出顺序全搞反。这道题最阴险的细节在func参数声明:4级考生刚学函数,容易把参数当引用,其实int x是值拷贝。

🔄 反命题思维 若把func改成void func(int &x,int &y),则c,d会变,输出24 12 24 12(选项A)。刷到类似题先问:参数前是否有&或const? 有&才改原值,无&只改副本。

同考点真题

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