GESP 三级 · GESP 202603 C++ 三级 第 3 题

选择题 · 答案 C

← 整套速查表 GESP 三级 全部真题

题目

关于下列正确的程序段,说法正确的是( )。

char str1[] = "Hello";
char str2[]={'H','e','l','l','0'};
答案:C

解题思维

答案C。数组和位运算的代码追踪要特别小心:数组下标从0开始,位运算结果可能不直观。建议画图辅助。

常见错误

位运算追踪时建议把数字写成二进制形式再逐位计算。

详细解析(节选)

【考点】字符数组初始化|字符串字面量|cout 输出行为

1. 考纲定位 C++ 字符数组与字符串字面量存储差异,属于基础语法与内存模型交叉考点。命题人放这道题卡住的是"以为赋值方式相同就等价"的直觉陷阱,以及是否注意到字符串末尾的空终止符。

2. 解题思维 看到 char str1[] = "Hello"; 立刻想到:字符串字面量在内存里是 6 个字节"Hell o\0",编译器自动补了空终止符。 看到 char str2[] = {'H','e','l','l','0'};:这是用花括号逐个字符初始化,只填了 5 个字节,末尾没有 \0。 → 长度不同,内容不同,两数组当然不相等。 关于 cout 输出:cout << str1 会读到 \0 停止,输出"Hello";cout << str2 读到末尾后没有 \0 会一直读内存直到遇到随机 0 值,每次结果可能不同——但这不影响数组本身是否相等。 因此选 C。

3. 陷阱拆解 A 项"完全相同"错在忽略空终止符与长度;B 项看似正确(cout 输出可能不同),但题干问的是"正确的程序段说法",B 只描述输出现象,不是对数组本身的判断,属于偷换问题;D 项"赋值方式完全相同"错在把字符串字面量与花括号列表混为一谈,本质是考你是否理解两种初始化的内存差异。 最阴险的是 B 项:它用"多次执行输出不同"来诱导你关注运行行为,从而误以为程序段本身有问题,偏离了"数组是否相等"这道题的核心。

4. 反命题思维 如果把 str2 改成 {'H','e','l','l','o','\0'} 或 char str2[] = "Hell0",答案就变成 A、B、D 都可能正确,C 错误——这就是同考点下的变式题。 刷到类似题时先问自己:命题人想考我"数组是否相等"还是"cout 输出行为",别被选项的表象带偏。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断