单选题
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语言选择判断题库
相关题目
单选题
1、第276题 (1.0分) 题号:706 若有说明:int *p,m=5,n;以下正确的程序段是()。
单选题
1、第275题 (1.0分) 题号:102 以下数据中,不正确的数值或字符常量是()。
单选题
1、第274题 (1.0分) 题号:596 下面四个选项中,均是不合法的用户标识符的选项是()。
单选题
1、第273题 (1.0分) 题号:492 下列程序段的输出结果为()。 float x=213.82631; printf(”%3d”,( );
单选题
1、第272题 (1.0分) 题号:702 对于基本类型相同的两个指针变量之间,不能进行的运算是()。
单选题
1、第271题 (1.0分) 题号:588 若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是()。
单选题
1、第270题 (1.0分) 题号:109 C语言中,double类型数据占()。
单选题
1、第269题 (1.0分) 题号:153 在C语言中,if语句后的一对原括号中,用以决定分支的流程的表 达式()。
单选题
1、第268题 (1.0分) 题号:726 fwrite函数的一般调用形式是()。
单选题
1、第267题 (1.0分) 题号:649 若有说明: int a[3][4]={0};则下面正确的叙述是()。
