GESP 四级 · GESP 202606 C++ 四级 第 21 题

判断题 · 答案 A

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

题目

在 C++ 中定义二维数组并初始化时,可以省略第一维,但不能省略第二维。因此 int a[][2] = {{1, 2}, {3, 4}}; 是合法的,而 int a[][] = {{1, 2}, {3, 4}}; 是不合法的。

答案:A

解题思维

答案A。考点: 数组/字符串的基本操作。

常见错误

关键提醒:C++中的^是异或运算符,不是乘方!2^5=7而非32。这是最高频的错误。

数组下标从0开始,a[n]访问的是第n+1个元素。越界不报编译错但结果不可预测。

详细解析(节选)

我是,出品。

【考点】C++数组初始化|二维数组维度固定|语法规范。命题人卡住的是初学者对"省略第一维"的机械记忆——误以为所有维度都能省略,其实只有第一维可省略。

直接代入C++规则:二维数组定义int arr[][N]时,第二维N必须固定,编译器才能确定每行元素个数;第一维M可省略,因为初始化列表能反推。这是C++标准强制约束——内存布局需要知道每行长度,否则无法计算偏移量。若数组声明为int a[][] = {{1,2}};,编译器会报错:无法确定每行元素个数。

错误选项B利用"数组可灵活"的错觉,混淆了C++数组与vector容器的语义。最阴险处是"省略"二字——命题人用"可省略"暗示"第二维也能省略",实则只有第一维可省略。若只背结论,看到a[][]会误判合法,但编译器会报错:缺少第二维大小导致无法计算内存偏移。

若改为int a[][2] = {{1,2}};,答案仍为正确;若改为int a[][] = {{1,2}};,答案仍为错误。刷到"数组维度省略"题,先看最内层维度是否固定。

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