GESP 三级 · GESP 202312 C++ 三级 第 8 题

选择题 · 答案 D

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

题目

下面 C++ 代码执行后的输出是()。

char ch[10]={'1'};
cout<<ch[2]<<endl;
答案:D

解题思维

这题考的是数组初始化规则和 cout 的输出特性。别被 char 数组吓到,它本质上就是存了一堆字节,默认全是 0。拿到题先画个格子:10 个坑,只填了第 1 个,问第 3 个坑里是啥?再想 cout 遇到空字符(0)会干啥。

常见错误

最容易掉进两个坑:一是把数组当成字符串,以为没填的部分是空格或者随机字符;二是看到答案 0 就选 A,忘了 cout 是按字符输出的,0 号字符看不见,所以屏幕上其实啥也没发生。还有人选 C 空格,那是 32,跟 0 差远了。

详细解析(节选)

考点定位

本题考查 GESP 三级大纲中数组初始化与字符输出的语义细节。命题人专门在此设坑,就是要区分 C 风格数组和 C++ string 的本质不同:数组是固定长度、未初始化部分默认为 0 的内存块,而 string 默认是空字符串。

解题心法

拿到这种带数组初始化的题,脑子里先画个格子图。 1. 数组 char ch[10] 在栈上占 10 个字节,位置是 0 到 9。 2. 初始化列表 {'1'} 只填了第一个位置(下标 0),剩下的 9 个位置都没动。 3. C++ 规定,数组声明时未初始化的元素,默认全部置为 0。所以 ch[1] 到 ch[9] 全是字符 0(即空字符 \0)。 4. 题目问 ch[2],正好落在未初始化区域,值就是 0。 5. 再看输出:cout << ch[2] 会把整数 0 按字符输出,字符 0 在终端上不可见,但 endl 会正常换行。所以肉眼看到的是“空行”,也就是“什么也不输出”。

逐空推演

内存布局:ch[0]='1', ch[1]='0', ch[2]='0', ..., ch[9]='0'。

ch[2] 的值是字符 0,输出时不显示任何可见字符;endl 输出换行符。最终效果:屏幕上只有一行空白。

易错点拆解

反命题思维

如果原题改成 char ch[10] = {'1', ' ', '0'}; cout << ch[2];,那 ch[2] 就是字符 '0',答案就会变成 A。若改成 string s = "1"; cout << s[2];,则触发越界访问,行为未定义(实际常为 \0 或随机值),考点就从“数组初始化”跳到“字符串越界”,难度直接升级。

考频与趋势

数组初始化属于基础语法,题库共考过 1295 题,覆盖 11 个考试级别。逐年分布:2008 年 1 题、2011 年 1 题、2019 年 3 题、2023 年 287 题、2024 年 413 题、2025 年 401 题、2026 年 109 题、null 年 80 题。分赛事:GESP 一级 332 题、GESP 二级 283 题、GESP 三级 215 题、GESP 四级 186 题、GESP 七级 91 题、GESP 八级 79 题、GESP 六级 78 题、GESP 五级 23 题、CSP 提高级 3 题、CSP 入门级 3 题、NOIP 提高组 初赛 2 题。可见这类题在 GESP 三级中占比约 16.6%,是高频考点。

预测

从数据看,2023-2025 年数组相关题目数量激增(287→413→401),说明命题组正在加大基础语法与内存语义的考查力度,尤其是“默认初始化”和“字符输出”这类容易被忽视的细节。未来 GESP 三级、四级甚至 CSP 入门级仍会持续出现类似陷阱题,可能会结合指针或结构体数组进一步考察内存布局。暂无足够依据预测具体年份的题型变化,但建议重点复习数组声明、初始化列表、默认值规则以及 cout 对不同类型(char、int、string)的输出行为差异。

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