在 C++ 中定义二维数组并初始化时,可以省略第一维,但不能省略第二维。因此 int a[][2] = {{1, 2}, {3, 4}}; 是合法的,而 int a[][] = {{1, 2}, {3, 4}}; 是不合法的。
答案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}};,答案仍为错误。刷到"数组维度省略"题,先看最内层维度是否固定。