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

1、〖第23题〗647) 以下能对二维数组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 语言中二维数组初始化的语法规则。我们需要逐一分析每个选项,判断其是否符合 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}};`** * **正确**。 * 省略了第一维(行),指定了第二维(列)为 3。 * 初始化列表中有两个子列表 `{1,2,3}` 和 `{4,5,6}`,每个子列表有 3 个元素,正好匹配列宽 3。 * 编译器会自动推断行数为 2。这等价于 `int a[2][3] = {{1,2,3},{4,5,6}};`。 * **C. `int a[2][4]={{1,2,3},{4,5},{6}};`** * **错误**(或者说存在逻辑矛盾/冗余,通常被视为不规范或错误,具体取决于编译器对“过多初始化器”的处理,但在标准单选题语境下,它不是“最佳”或“完全正确”的表述,主要问题在于初始化器的结构)。 * 定义了一个 $2 \times 4$ 的数组,总共能容纳 8 个整数。 * 初始化列表提供了三组数据:`{1,2,3}`、`{4,5}`、`{6}`。 * 按照 C 语言规则,花括号内的子列表对应行。这里提供了 **3 个子列表**,意味着试图初始化 **3 行**。 * 但是数组定义只有 **2 行** (`a[2][4]`)。这会导致“初始化器过多”(too many initializers)的错误,因为第 3 个子列表 `{6}` 没有对应的行来存放。 * *注:如果是 `int a[][4]={{1,2,3},{4,5},{6}};` 则是正确的,编译器会推断行数为 3。但既然显式定义了 `a[2][4]`,就不能提供超过 2 行的初始化数据。* * **D. `int a[][3]={{1,0,1}{},{1,1}};`** * **错误**。语法格式错误。 * 在第一个子列表 `{1,0,1}` 和第二个子列表 `{}` 之间**缺少逗号** `,` 分隔。 * 正确的写法应该是 `{{1,0,1}, {}, {1,1}}`(假设意图是空行)。此外,中间的空 `{}` 虽然语法上可能允许(表示全0),但缺少逗号是致命的语法错误。 **结论:** 只有选项 **B** 完全符合 C 语言二维数组初始化的语法规则:省略第一维,指定第二维,且初始化数据的结构与数组维度匹配。 **正确答案:B**
题目纠错
c语言选择判断题库

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

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