在下列代码的横线处填写( ),可以使得输出是“20 10”。
#include <iostream>
using namespace std;
void xchg(________) { // 在此处填入代码
int t = *x;
*x = *y;
*y = t;
}
int main() {
int a = 10, b = 20;
xchg(&a, &b);
cout << a << " " << b << endl;
return 0;
}
答案B。代码补全要考虑参数传递方式。如果需要修改实参,需用指针(*)传递。排序算法要理解每步比较的含义。
排序代码补全要理解每步比较的含义。选择排序找最小值时比较的是array[min]>array[j]。
【考点】指针基础|函数参数传递|地址引用
🎯 考纲定位:GESP 四级 C++ 大纲,指针基础与函数参数传递。命题人特意选&操作符,卡住80%考生对"地址传递"与"值传递"的本质混淆,这是四级区分度最大的考点。
🧠 解题思维:看到 *x 和 *y 必须立刻反应:x、y 是 int* 类型。main 里 &a 是 a 的地址,正好匹配参数类型。这是指针操作的标准模式:传址实现修改。函数体用临时变量 t 保存原值,再交叉赋值,经典交换逻辑。
🪤 陷阱拆解:陷阱 A 把 int 当参数,*x 非法;陷阱 C 同理;陷阱 D 用引用,&a 已是引用,再取地址语法错误且*a 无意义。考生常误以为 &a 是值,其实它是地址。命题人用 C++ 特有的引用语法伪装陷阱,背模板的人必栽。
🔄 反命题思维:命题人若改用引用参数,函数体应写 a = b; b = t; 而非 *x = *y;。遇到这类题先问:函数里是否用解引用?是则必为指针。四级最爱考"看起来像引用其实是地址"的陷阱,刷到先核对符号类型。