单选题
1、第130题 (1.0分) 题号:167 下列语句中,不正确的是()。
A
static char a[2]={1,2};
B
static int a[2]={'1','2'};
C
static char a[2]={'1','2','3'};
D
static char a[2]={'1'};
答案解析
正确答案:C
解析:
这道题考查的是 C 语言中数组初始化的基本规则,特别是**初始化列表元素个数与数组定义长度之间的关系**。
### 核心知识点
在 C 语言中,当定义数组并同时进行初始化时:
1. **初始化元素个数 < 数组长度**:剩余的元素会自动初始化为 0(对于字符型是 `\0`,整型是 `0`)。这是合法的。
2. **初始化元素个数 = 数组长度**:完全匹配,合法。
3. **初始化元素个数 > 数组长度**:**非法**。编译器会报错,因为试图将多于数组容量的数据存入数组,导致溢出。
---
### 选项逐一分析
**A. `static char a[2]={1,2};`**
* **分析**:定义了一个长度为 2 的字符数组 `a`,初始化列表中有 2 个整数 `{1, 2}`。
* **合法性**:合法。虽然用整数初始化字符数组,但 1 和 2 都在 `char` 的取值范围内,会发生隐式类型转换。元素个数等于数组长度,完全匹配。
* **结果**:正确。
**B. `static int a[2]={'1','2'};`**
* **分析**:定义了一个长度为 2 的整型数组 `a`,初始化列表中有 2 个字符常量 `'1'` 和 `'2'`。
* **合法性**:合法。字符常量在 C 语言中本质上是整数(ASCII 码值),可以赋值给 `int` 类型。元素个数等于数组长度,完全匹配。
* **结果**:正确。
**C. `static char a[2]={'1','2','3'};`**
* **分析**:定义了一个长度为 **2** 的字符数组 `a`,但初始化列表中提供了 **3** 个元素 `'1', '2', '3'`。
* **合法性**:**不合法**。初始化值的个数(3个)超过了数组定义的容量(2个)。这会导致编译错误("too many initializers")。
* **结果**:**错误**(符合题目要求选出的“不正确”项)。
**D. `static char a[2]={'1'};`**
* **分析**:定义了一个长度为 2 的字符数组 `a`,初始化列表中只提供了 1 个元素 `'1'`。
* **合法性**:合法。第一个元素 `a[0]` 被初始化为 `'1'`,第二个元素 `a[1]` 会自动初始化为 `\0`(即 0)。
* **结果**:正确。
---
### 结论
选项 **C** 试图用 3 个值初始化一个只能容纳 2 个元素的数组,违反了 C 语法规则。
因此,不正确的语句是 **C**。
题目纠错
c语言选择判断题库
相关题目
单选题
1、第129题 (1.0分) 题号:651 以下定义语句中,错误的是()。
单选题
1、第128题 (1.0分) 题号:125 下列程序的输出结果是()。
单选题
1、第127题 (1.0分) 题号:639 以下能正确定义数组并正确赋初值的语句是()。
单选题
1、第126题 (1.0分) 题号:689 以下叙述中不正确的是()。
单选题
1、第125题 (1.0分) 题号:603 以下符合C语言语法的赋值表达式是()。
单选题
1、第124题 (1.0分) 题号:141 为了提高程序的运行速度,在函数中对于整型或指针可以使用()型的变量。
单选题
1、第123题 (1.0分) 题号:601 下面四个选项中,均是不合法的浮点数的选项是()。
单选题
1、第122题 (1.0分) 题号:193 具有相同类型的指针变量p与数组a,不能进行的操作是()。
单选题
1、第121题 (1.0分) 题号:673 C语言规定,函数返回值的类型是由()。
单选题
1、第120题 (1.0分) 题号:173 C语言执行程序的开始执行点是()。
