关于下面程序,说法正确的是( )。
void show() {
int stars = 5;
}
int main() {
cout << stars;
return 0;
}在纸上逐行模拟程序执行,重点追踪变量值变化和输出语句。按照题目输入代入计算。正确答案C。
关键提醒:C++中的^是异或运算符,不是乘方!2^5=7而非32。这是最高频的错误。
【考点】作用域|变量声明|编译规则
本题考查 GESP 四级"基础编程概念"中的变量作用域与编译规则。命题人专挑"函数内声明、函数外使用"这类边界场景,卡住那些只背"变量有值就能输出"的学生。
看到题先定位声明位置:stars 定义在 show 函数内部,作用域仅限该函数。main 里直接写 cout << stars 时,编译器找不到符号,直接报错。这类题通法是:1. 逐行标变量定义处;2. 检查使用点是否在作用域内;3. 若不在,编译必挂。
逐个拆选项:A 看似有值 5 就输出,但忘了 stars 根本没传出来;B 假设编译通过,却忽略作用域缺失;D 把 cout 当成特殊运算符,完全误解其用法。最阴险的是"只在 show 中有效"这句绝对化表述——若只记结论不追本质,就会以为"有效"就能用,掉进编译陷阱。
站在命题人角度:若把 stars 改成全局变量,答案变 A;若在 main 里先调用 show() 再输出,答案变 B。刷到类似题先问:考我作用域还是考我语法细节?