下面( )正确定义了二维数组。
答案B。二维数组在内存中按行优先连续存储。int array[5][3]中元素按array[0][0]到array[4][2]的顺序连续排列。
二维数组按行优先存储。计算偏移量先确定每行元素个数再乘行号+列号。
【考点】数组定义语法|二维数组声明规则|C++与C语法差异
本题考查【数组定义语法】与【二维数组声明规则】,位于GESP C++四级大纲"基本数据类型与存储"模块。命题人卡住考生对C++数组下标用方括号[ ]而非圆括号()的记忆,这是C++语法与函数调用最易混淆的边界。
看到"定义二维数组"先锁定语法特征:C++中数组名后必须接两对方括号[ ],维度间用逗号分隔。选项A用逗号[3,4]是C语言特性;选项C用圆括号arr(3,4)是函数调用;选项D用减法a[3-4]是非法初始化。只有B符合规范,这是C++语言标准强制要求,非C++语法库可修改。
选项A利用"C语言数组定义"的惯性思维误导,C++严格规定多维数组必须用嵌套方括号[3][4];选项C把数组声明伪装成函数调用,圆括号()是C++语法禁区;选项D看似合法实则非法,3-4是算术运算而非数组维度声明。命题人专攻初学者混淆C/C++语法差异的弱点。
若将题干改为"下面( )正确定义了一个函数",则圆括号()成为正确选项;若改为"定义一个一维指针",则int* ptr = arr;才是考点。刷到类似题先问:命题人想考我C++与C语法差异、还是内存布局细节?