在 C++ 语言中,定义数组时,[] 中必须指定元素个数。
这题考的是C++数组定义的灵活性。拿到题先别急着背‘定义必须写长度’,要想到‘有没有例外’——带初始化列表时,编译器能自动数个数,这时候[]里其实可以空着。
最容易错的就是死记硬背‘定义数组必须指定长度’,忽略了C++允许在初始化列表后省略[]中的元素个数。比如int a[] = {1,2,3}是完全合法的,编译器会根据花括号里的元素数量自动确定数组大小。命题人专门挖这个坑,就是看学生是不是只会机械记忆语法,还是真正理解语言规范。
【考点】C++数组定义语法|初始化列表的自动推导机制|绝对化表述的陷阱
这道题考查的是C++语言中数组定义的灵活性。很多同学会死记硬背‘定义数组时[]里必须写长度’,从而误选A。但命题人专门在这里挖了个坑:C++允许在带初始化列表的情况下,省略[]中的元素个数。
核心概念要讲透:当数组定义包含初始化列表(即花括号里的元素)时,编译器会先计算列表中元素的个数,然后自动把这个数量赋给数组长度。这时候[]里的内容其实是可选的,甚至可以完全不写。只有在不提供初始化列表、或者初始化列表不足以确定长度(比如用表达式初始化)时,才必须显式写出长度。
命题视角:这类题最喜欢用‘必须’‘总是’‘一定’这种绝对化词汇来设陷阱。C++标准里对数组大小由初始化器决定的规则(第6.2.8条)是基础,但初学者往往只记住了‘数组长度固定’这个表象,却没意识到定义阶段就允许省略长度。命题人就是想考你:能不能跳出机械记忆,看到语言规范的例外情况。
思考路径:看到题目,先别急着下结论。脑子里要过一遍两种常见写法: 1. int a[] = {1, 2, 3}; —— 合法,长度自动为3 2. int b[5]; —— 合法,必须写5 既然第一种写法存在,那‘必须指定’这个说法就不成立了,答案自然选B。
避坑指南:千万别被‘定义数组’这四个字误导。在C++里,带初始化列表的声明同样属于‘定义数组’的范畴,只是它的长度推导方式不同。如果你只背结论,不看标准,就会掉进这个绝对化表述的坑里,把正确选项当成错误。
考频与趋势:从真实题库数据看,‘复合类型’考点共考过146题,覆盖GESP五级到CSP入门级;其中GESP五级考了52题,三级22题,六级21题,四级12题,七级21题,八级16题。‘一维数组’更是高频考点,共224题,分布在2008-2026年,近三年(2024-2026)分别考了48、55、59题,明显呈上升趋势。这类语法细节题在GESP三级、四级、五级中反复出现,说明命题人持续重视对基础语法的精准考察。
未来预测:基于数据趋势,GESP三级、四级、五级在2025-2026年对‘数组定义灵活性’‘初始化列表自动推导’这类题型的考查频率仍在上升,预计2027年可能继续维持高位。暂无足够依据预测具体年份的题型变化,但可以肯定的是,只要还在考C++基础,这种‘绝对化表述找例外’的套路大概率会一直存在。