执行下面代码后输出为( )。
struct S { int a; int b; };
void g(S s){ s.a += 10; }
void h(S& s){ s.b += 10; }
int main(){
S s{1,2};
g(s);
h(s);
cout << s.a << " " << s.b;
}答案B。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。
指针和数组追踪时画内存布局图可以大大简化理解。
【考点】传值与传址|结构体成员作用域
GESP 四级《C++ 基础语法》模块。命题人专门把这道题放在这里,就是卡住那些只背"引用会传递"却不懂"值传递会拷贝"的选手——90% 的考生看到 g(s) 就下意识以为会改到原对象,这是最典型的认知偏差。