GESP 三级 · GESP 202309 C++ 三级 第 7 题

选择题 · 答案 B

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

题目

以下数组定义,符合 C++ 语言语法的是( )。

答案:B

解题思维

这题考数组定义语法。拿到题先盯[]里填啥:没填长度必须给初始化列表,填了长度必须是整型常量,初始化列表里的值类型还得能转成数组元素类型,别把Java的new混进来。

常见错误

最容易栽跟头的是C选项,把浮点数3.0当数组长度,这绝对不行,数组下标和长度只能是整数。A选项空着长度以为能自动推断,除非有初始化列表否则编译不过。D选项一看就是Java写法,C++数组定义不能用new。还有那种只背‘下标从0开始’却忘了‘长度必须是常量表达式’的,看到浮点下标就懵,其实本质就是类型不匹配。

详细解析(节选)

【考点】数组定义语法、初始化列表、类型规则

这题是GESP三级‘数组与指针’模块的经典题,命题人把‘数组下标必须是常量表达式’和‘初始化列表元素类型需兼容’这两个容易混淆的点打包在一起,专门卡那些只记‘下标从0开始’却不懂定义规则的同学。

咱们逐条过一遍选项:

A选项double a[];,这里[]里啥都没写,C++规定如果省略数组长度,必须同时提供初始化列表让编译器自动推断,光声明一个没长度也没初始值的数组是编译错误的,直接排除。

B选项double b[] = {1, 2.0, '3'};,这是合法的。省略长度没问题,因为后面紧跟了初始化列表,元素个数自动确定为3。注意那个'3'是字符常量,在C++里字符常量会被隐式转换为对应的整数值(ASCII码),再赋值给double类型时,会进行数值转换,语法完全没问题,所以B是正确答案。

C选项double c[3.0];,这里踩了个典型坑。数组长度必须是整型常量表达式,3.0是浮点数,类型不匹配,编译器会报错,这题就是专门考这个细节。

D选项double[] d = new double[3];,一看就是Java的数组定义写法,C++里数组定义不支持new关键字,也不支持这种声明式写法,属于张冠李戴。

【避坑提醒】 1. 看到[]里没填数字,第一反应必须是‘后面有没有初始化列表’,没有就错。 2. 看到浮点数字面量(如3.0、1.5)出现在数组长度位置,直接判错,别被‘3.0等于3’这种直觉带偏,类型才是关键。 3. 初始化列表里的元素类型不匹配时,要想到隐式转换规则(char转int再转double),别以为全是double就万事大吉。 4. 区分C++和Java:C++数组定义是type name[size],Java是type[] name = new type[size],混用必错。

【考频与趋势】 从题库数据看,‘复合类型’考点在2023-2026年共考了146题,呈逐年上升趋势(2023年21题→2026年27题),说明这类基础语法题依然是高频考点。其中‘一维数组’更是重灾区,2023-2026年累计考了149题(27+48+55+59),且2026年达到峰值59题,占比超过三分之一。分赛事来看,GESP三级考了32题,GESP五级考了59题,NOIP普及组初赛考了5题,说明从入门到提高组,数组定义都是必考内容。

【预测】 基于2026年‘一维数组’考频达到59题的历史新高,以及‘复合类型’整体上升趋势,可以合理预测未来2-3年内,数组定义、初始化列表、类型转换这类基础语法题仍将是GESP三级、五级以及NOIP普及组初赛的必考题,甚至可能以‘动态数组(vector)’或‘多维数组初始化’的形式变相出现。暂无足够依据预测具体年份的考频,但复习时务必把数组定义的所有细节(长度规则、初始化列表语法、类型兼容性)吃透,这是拿分的基础。

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