下列代码中,输出结果是( )
#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。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。
指针和数组追踪时画内存布局图可以大大简化理解。
【考点】参数传递方式|局部变量作用域|函数返回值
🎯 考纲定位 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? 有&才改原值,无&只改副本。