单选题
1、第262题 (1.0分) 题号:648 以下不能对二维数组a进行正确初始化的语句是()。
A
int a[2][3]={0};
B
int a[][3]={{1,2},{0}};
C
int a[2][3]={{1,2},{3,4},{5,6}};
D
int a[][3]={1,2,3,4,5,6};
答案解析
正确答案:C
解析:
这道题考查的是 C 语言中二维数组初始化的规则。我们需要逐一分析每个选项,找出**不能**正确初始化的语句。
**核心知识点:**
1. **维度匹配**:初始化列表中的元素个数(或子列表个数)不能超过数组定义的大小。
2. **省略行数**:定义二维数组时,可以省略第一维(行数),但第二维(列数)必须指定。编译器会根据初始化数据的多少自动计算行数。
3. **默认补零**:如果提供的初始值少于数组元素总数,剩余元素会自动初始化为 0。
**选项分析:**
* **A. `int a[2][3]={0};`**
* **分析**:定义了一个 2 行 3 列的数组。初始化列表 `{0}` 表示将第一个元素 `a[0][0]` 初始化为 0。根据规则,其余未显式初始化的元素都会自动补 0。
* **结果**:这是合法的,整个数组所有元素均为 0。
* **B. `int a[][3]={{1,2},{0}};`**
* **分析**:省略了行数,列数为 3。初始化列表包含两个子列表 `{1,2}` 和 `{0}`,这意味着有 2 行数据。
* 第 0 行:`{1, 2}`,不足 3 个元素,补零后为 `1, 2, 0`。
* 第 1 行:`{0}`,不足 3 个元素,补零后为 `0, 0, 0`。
* **结果**:编译器推断行数为 2,数组大小为 `a[2][3]`,初始化合法。
* **C. `int a[2][3]={{1,2},{3,4},{5,6}};`**
* **分析**:明确定义了数组为 **2 行** 3 列 (`a[2][3]`)。
* 但是,初始化列表提供了 **3 个子列表**:`{1,2}`、`{3,4}` 和 `{5,6}`。这暗示了有 3 行数据。
* **错误原因**:初始化数据的行数(3行)超过了数组定义的行数(2行)。这会导致编译错误(initializer exceeds array dimensions / too many initializers)。
* **结果**:**非法**,不能正确初始化。
* **D. `int a[][3]={1,2,3,4,5,6};`**
* **分析**:省略了行数,列数为 3。初始化列表是一个扁平的一维列表,共有 6 个元素。
* 编译器会根据列数 3 来划分行数:$6 \div 3 = 2$ 行。
* 第 0 行:`1, 2, 3`
* 第 1 行:`4, 5, 6`
* **结果**:编译器推断行数为 2,数组大小为 `a[2][3]`,初始化合法。
**结论:**
选项 C 中定义的数组只有 2 行,但试图初始化 3 行的数据,超出了数组边界,因此是错误的初始化语句。
正确答案是 **C**。
题目纠错
c语言选择判断题库
相关题目
单选题
1、〖第37题〗528) 对于void类型函数,调用时不可作为()。
单选题
1、〖第36题〗88) 两个指针变量不可以()。
单选题
1、〖第35题〗567) 以下叙述中正确的是 ()。
单选题
1、〖第34题〗454) 以下函数调用语句中实参的个数是()。 func((e1,e2),(e3,e4,e5));
单选题
1、〖第33题〗214) C语言中的文件的存储方式有()。
单选题
1、〖第32题〗603) 以下符合C语言语法的赋值表达式是()。
单选题
1、〖第31题〗601) 下面四个选项中,均是不合法的浮点数的选项是()。
单选题
1、〖第30题〗730) 若以”a+”方式打开一个已存在的文件,则以下叙述正确的是()。
单选题
1、〖第29题〗734) 以下可作为函数fopen中第一个参数的正确格式是()。
单选题
1、〖第28题〗400) 下列语句的输出结果是()。 printf(”%d\n”,(int)(2.5+3.0)/3);
