以下哪个选项能正确定义一个二维数组( )
这题考二维数组声明语法:C++规定声明数组时第二维(列数)必须写死,第一维可省略。看到选项先抓类型合法性,再数方括号里有没有漏掉列数,有就是坑,没写就是正解。
学生最容易把B选成答案,因为char b[][4]语法确实合法,但题目问的是‘定义一个二维数组’,B实际上定义的是一个‘指向字符数组的指针’(首维省略后不再是数组对象),语义完全不对。还有同学会纠结bool类型能不能做数组元素,其实任何内置类型都可以。A和C错得比较明显,就是第二维漏了,但初学者常误以为‘第一维能省,第二维也能省’,或者‘只要写了数字就行,位置无所谓’,这就是掉坑的根本原因。
【考点】二维数组声明的语法铁律:C++中声明数组时,第二维(列数)必须明确给出,第一维(行数)可省略;且类型必须是内置类型。命题人最爱在‘第二维是否写死’和‘语义是数组还是指针’这两处挖坑。看到 int a[][] 立刻警觉:第二维缺失,非法。double c[3][] 同理,第二维空着,编译器无法计算每行占多少字节,直接报错。char b[][4] 看似合法,其实是‘可变长度数组’语法,声明时不指定行数,只是定义每行长度为 4,这不是题目要的‘完整二维数组定义’,而是一个指向字符数组的指针,很多学生凭经验选 B,却忽略了题干问的是‘二维数组’而非‘指针’。bool d[3][4] 满足所有规则:类型合法、首维可省略(此处写了)、次维必须且已写,是正确答案。通法:二维数组声明,先定类型,再定行数和列数,列数绝对不能省。