GESP 三级 · GESP 202403 C++ 三级 第 22 题

判断题 · 答案 B

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

题目

在 C++ 语言中,字符数组被定义时,它的大小可以调整。( )

答案:B

解题思维

别被‘调整’二字忽悠了,拿到题先锁定‘定义时’这个时间状语。数组一旦声明,内存块大小在编译期就焊死了,后续想改长度只能换用vector或string,这题就是考你分得清‘静态数组’和‘动态容器’的边界。

常见错误

很多考生看到‘字符数组’就联想到string,或者把‘给数组赋值’(如a[0]='a')误当成‘调整数组大小’。还有人会纠结能不能用变量做下标(如int n; char a[n];),其实C++标准数组必须用常量表达式,变量下标是非法的。更隐蔽的坑是混淆‘修改元素’和‘修改长度’,以为改了内容数组就变长了,其实长度根本没变。

详细解析(节选)

【考点】C++数组定义与内存分配特性|静态数组大小不可变|复合类型与一维数组的底层区别

对应GESP C++三级大纲中‘数组与字符串’模块,命题人专门卡住‘数组大小固定’这一底层概念。多数考生把‘赋值’和‘扩容’混为一谈,以为改元素就能改长度,或者看到‘字符’就下意识想到std::string,忽略了题目明确说的是‘字符数组’(即C-style数组)。

看到‘定义时’先锁定数组声明语法char a[10];,其内存块在编译期就定死了,后续无法通过语言特性扩容。正确思路是区分‘修改元素’(可行)与‘修改数组长度’(不可行),这类题通法就是先读准术语再对照定义。选项A的陷阱在于偷换概念:考生常把‘给数组赋新值’当成‘调整大小’,命题人利用‘调整’一词的模糊性诱导误判。更阴险的是‘定义时’这个限定——即使后续用指针动态分配,也不是‘定义时’能调整,而是‘定义后’用new或vector替代,数组本身永远不可变长。

命题人若把‘字符数组’换成‘字符串’或‘动态数组’,答案会反转,因为std::string和std::vector<char>支持resize()。刷到类似题先问自己:考的是静态数组还是动态容器?术语边界决定对错。

从考频来看,复合类型在题库中覆盖7个级别,GESP三级考了22题,占比约15%,属于高频考点;一维数组更是重头戏,GESP三级考了32题,占总数的14.3%。近三年趋势明显:2023年复合类型考21题,2024年激增至42题,2025年达47题,2026年回落至27题;一维数组2023年27题、2024年48题、2025年55题、2026年59题,呈现逐年递增态势。这说明命题组对数组概念的考察力度在加大,且更倾向于在基础语法细节(如定义时的常量表达式要求、大小固定性)上挖坑,而非单纯考用法。

基于数据预测:未来GESP三级极大概率会继续在‘数组定义语法’与‘动态容器区别’之间出题,可能会结合指针运算或sizeof考察数组大小,难度不会降低。暂无足够依据预测具体年份的题型变化,但‘静态数组大小不可变’这一结论在未来五年内大概率仍是必考且必错点。

综上,本题答案选B,因为C++中定义数组时,其大小必须用常量表达式指定,一旦定义完成,该数组的内存长度便不可调整。

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