若函数声明为 int f(int &x){ x+=3; return x; },则对声明的变量 int a=3,下面哪个调用能够改变 $a$ 的值( )。
这题考引用传递。看到函数参数 int &x 就明白 x 是 a 的别名,要让 x 能改 a,调用时必须传 a 本身,让 x 绑定到 a,其他选项要么类型不对要么传的是临时值,所以选 C。
最容易把 &a 当成传引用,其实 &a 是取地址,类型是 int*,跟 int &x 类型不匹配会编译报错;还有人觉得 a-3 也能改 a,其实传进去的是临时值,函数里改了也没用;另外要注意区分传值函数 int f(int x),那种确实不会改原变量,命题人常把这两种混在一起考,让人误以为 C 也能改 a。
我是 ,这道题考查 C++ 中引用传递与参数绑定的核心概念,命题人专门挖了"引用与指针的混淆"这个坑。看到函数声明 int f(int &x) 时,首先要明确:x 不是独立的变量,而是实参 a 的别名,函数内部对 x 的任何修改(如 x+=3)都会直接反映到 a 上。因此,要让 a 被改变,调用时必须传 a 本身,让 x 绑定到 a。其他选项要么类型不匹配,要么传的是临时值,要么语法错误。具体看:A 项 f(&a) 中 &a 是取地址,类型是 int*,而函数要求 int &x,类型不兼容,编译报错,这是 80% 考生的失分点;B 项 f(*a) 语法错误,a 是 int 不是指针,不能解引用;C 项 f(a) 传 a 本身,x 成为 a 的别名,x+=3 直接改 a,正确;D 项 f(a-3) 传的是表达式 a-3 的结果,这是一个临时值,x 绑定到它,函数里改了也只是一次性计算,a 不变。若题目改成 int f(int x) 传值,选 C 就错了,因为传值不会改原变量。命题人爱用"看似正确实则失败"的陷阱,刷到引用题先问"传的是引用还是值",这是区分理解与死记的关键。从考频看,基础语法在题库中占比极高,GESP 四级共 186 题,其中引用相关题目虽未单独列目,但结合变量与常量、基本数据类型分布,四级每年考 287 到 413 题,2024 年 413 题、2025 年 401 题,引用传递作为函数模块核心,必是高频考点。未来预测:GESP 四级函数与引用模块将继续保持高热度,命题人可能继续用"引用 vs 指针""引用 vs 传值"对比来挖坑,尤其会在选项里混入 &a 或 *a 这种易混淆写法,考生需牢牢记住"传引用必须传对象本身"这一原则。暂无足够依据预测具体年份题型变化,但引用传递的考查逻辑不会变。