AI智能推荐题库-试题通 AI智能整理导入题库-试题通
×
首页 题库中心 c语言选择判断题库 题目详情
CA4E3A01C46000013755684012D01E55
c语言选择判断题库
379
单选题

1、以下能对二维数组a进行正确初始化的语句是()。

A
 int a[2][]={{1,0,1},{5,2,3}};
B
 int a[][3]={{1,2,3},{4,5,6}};
C
 int a[2][4]={{1,2,3},{4,5},{6}};
D
 int a[][3]={{1,0,1}{},{1,1}};

答案解析

正确答案:B

解析:

这道题考查的是 C 语言中二维数组初始化的语法规则。我们需要逐一分析每个选项,看其是否符合编译器的要求。 **核心规则回顾:** 1. **维度省略规则**:在初始化时,可以省略第一维(行)的大小,编译器会根据初始值的个数自动计算;但**绝对不能省略第二维(列)的大小**。因为编译器需要知道每一行有多少个元素,才能正确地进行内存分配和地址计算。 2. **初始化列表格式**:使用花括号 `{}` 包裹初始值。如果是分行初始化,通常外层花括号内包含多个内层花括号,每个内层花括号代表一行。 3. **缺省补零**:如果提供的初始值少于数组定义的总元素个数,剩余的元素会自动初始化为 0。 **选项分析:** * **A. `int a[2][]={{1,0,1},{5,2,3}};`** * **错误**。这里省略了第二维(列)的大小 `[]`。C 语言规定,二维数组初始化时,必须指定列数(第二维),否则编译器无法确定每行的宽度,也就无法确定数据的存储布局。 * **B. `int a[][3]={{1,2,3},{4,5,6}};`** * **正确**。 * 省略了第一维(行)的大小,这是允许的。编译器会根据后面有两个子列表 `{1,2,3}` 和 `{4,5,6}` 推断出行数为 2。 * 指定了第二维(列)的大小为 3。 * 初始化列表格式正确,每行有 3 个整数,与列宽匹配。 * 最终数组等价于 `int a[2][3]`。 * **C. `int a[2][4]={{1,2,3},{4,5},{6}};`** * **错误**(或者说存在严重问题,通常被视为错误或不符合题意)。 * 虽然语法上某些编译器可能允许这种“嵌套层级过多”或“部分初始化”的写法,但在标准的二维数组初始化语境下,这个选项的问题在于它试图用 3 个子列表 `{1,2,3}`, `{4,5}`, `{6}` 去初始化一个只有 **2 行** (`a[2][4]`) 的数组。 * 第一个子列表 `{1,2,3}` 会初始化第一行。 * 第二个子列表 `{4,5}` 会初始化第二行。 * 第三个子列表 `{6}` **超出了数组的行数范围**(因为只有 2 行)。这会导致编译错误(too many initializers)。 * *注:即使理解为扁平化初始化,写法也不规范。通常二维数组初始化要么按行分组,要么完全扁平。这里明显的错误是初始化的行数超过了定义的行数。* * **D. `int a[][3]={{1,0,1}{},{1,1}};`** * **错误**。初始化列表的语法格式错误。 * `{1,0,1}{}` 这种写法是不合法的。子列表之间应该用逗号 `,` 分隔,而不是直接连写。 * 正确的写法应该是 `{{1,0,1}, {}, {1,1}}` (假设意图是三行)。 * 此外,中间的空 `{}` 虽然在某些标准下可能表示全零行,但结合前面的语法错误,整个语句是非法的。 **结论:** 只有选项 **B** 完全符合 C 语言二维数组初始化的语法规则:省略第一维,指定第二维,且初始值数量与数组维度匹配。 **正确答案:B**
题目纠错
c语言选择判断题库

扫码进入小程序
随时随地练习

关闭登录弹窗
专为自学备考人员打造
勾选图标
自助导入本地题库
勾选图标
多种刷题考试模式
勾选图标
本地离线答题搜题
勾选图标
扫码考试方便快捷
勾选图标
海量试题每日更新
波浪装饰图
欢迎登录试题通
可以使用以下方式扫码登陆
APP图标
使用APP登录
微信图标
使用微信登录
试题通小程序二维码
联系电话:
400-660-3606
试题通企业微信二维码