执行下面程序后,输出为( )。
int f(int x = 2){
return x * 3;
}
int main(){
cout << f() << " " << f(4);
}答案B。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。
指针和数组追踪时画内存布局图可以大大简化理解。
【考点】默认参数|函数调用|算术运算
🎯 GESP四级C++模块;默认参数只在省略实参时生效,考的是你是否分清"有值"和"无值"的调用差异。命题人专挑函数定义和调用混淆的边界,卡住多数人对参数传递机制的理解深度。
🧠 f()无实参,x取默认值2,2×3=6;f(4)有实参4,跳过默认,4×3=12。核心是看实参是否给出,不给出才用默认。这一类题通法:先看函数签名有无默认参数,再看调用时是否提供值,最后执行逻辑。
🪤 A错在把2当成函数返回值(忘了乘3);C错在认为第二次调用仍用默认值2;D错在顺序颠倒。最阴险的是默认参数"只在省略时生效"这一定义,背结论会掉坑。
🔄 若改成f(int x=0)则输出0 12;若改成f(int x=2, int y=3)且函数为x+y*3,f()输出6。刷到类似题先问"实参给了没",这才是反命题思维。命题人常把默认参数和函数返回值混淆,或把调用顺序打乱,本质都是考你对函数调用实参处理的理解。