下面代码的描述中,正确的是( )。
void n_chars(char c, int n) {
while (n-- > 0)
cout << c;
}
char my_char = 'w';
int times = 5;
n_chars(my_char, times);答案B。>=是大于等于比较运算符,>>=是右移赋值运算符(a>>=3等价于a=a>>3)。两者都是合法的C++运算符。
>=是右移赋值运算符,不是比较运算符。a>>=3相当于a=a>>3,将a右移3位。
【考点】函数形参|实参传递|值传递
定位 GESP 四级函数模块,命题人专卡“形参与实参”概念混淆。绝大多数初学者看到函数调用就默认参数会随调用变化,实则 C++ 默认值传递,形参是局部变量,与实参独立。
解析:定义函数 n_chars(char c, int n),形参 n 是局部变量;调用 n_chars(my_char, times) 时,times 作为实参按值拷贝给 n。循环 while(n-- > 0) 仅修改 n,主函数中 times 仍为 5。
选项 A 错在误判值传递效果;C 错在混淆形参与实参定义位置;D 错在忽略类型匹配——函数首参是 char,实参 times 是 int,互换调用会编译失败。
反命题:若函数改为 n_chars(int n, char c),则 D 成立;若改为引用传递 int &n,则 A 正确。刷到此类题先问:考的是参数名、类型还是传递方式?