单选题
1、〖第2题〗441) 下列语句中,不正确的是()。
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(对于静态存储期 `static` 的变量,即使不显式初始化也是 0)。
2. 如果初始化列表中的元素个数**等于**数组大小,所有元素都被正确初始化。
3. 如果初始化列表中的元素个数**多于**数组大小,编译器会报错(Error),因为这是非法的内存访问定义,超出了数组边界。
我们逐项分析:
* **A. `static char a[2]={1,2};`**
* 数组 `a` 大小为 2。
* 初始化列表中有 2 个元素:`1` 和 `2`。
* 元素个数等于数组大小,合法。`a[0]=1`, `a[1]=2`。
* **结论:正确。**
* **B. `static int a[2]={'1','2'};`**
* 数组 `a` 大小为 2,类型为 `int`。
* 初始化列表中有 2 个字符常量 `'1'` 和 `'2'`。在 C 语言中,字符常量可以提升为整数(ASCII 码值)。
* 元素个数等于数组大小,合法。`a[0]='1'` (即 49), `a[1]='2'` (即 50)。
* **结论:正确。**
* **C. `static char a[2]={'1','2','3'};`**
* 数组 `a` 大小为 2。
* 初始化列表中有 **3** 个元素:`'1'`, `'2'`, `'3'`。
* 初始化元素的个数(3)**大于**数组定义的大小(2)。
* 这违反了 C 语言语法规定,编译器会抛出“too many initializers”(初始化项过多)的错误。
* **结论:不正确。**
* **D. `static char a[2]={'1'};`**
* 数组 `a` 大小为 2。
* 初始化列表中只有 1 个元素:`'1'`。
* 元素个数少于数组大小,合法。`a[0]='1'`,剩余的 `a[1]` 会自动初始化为 `0`(因为它是 `static` 变量,且部分初始化后剩余部分补零)。
* **结论:正确。**
### 最终答案:
题目要求选出**不正确**的语句,因此答案是 **C**。
题目纠错
c语言选择判断题库
相关题目
单选题
1、第297题 (1.0分) 题号:525 C语言中不可以嵌套的是()。
单选题
1、第296题 (1.0分) 题号:626 若希望当A的值为奇数时,表达式的值为”真”,A的值为偶数时,表达 式的值为”假”,则以下不能满足要求的表达式是()。
单选题
1、第295题 (1.0分) 题号:96 下列字符序列中,不可用作C语言标识符的是()。
单选题
1、第294题 (1.0分) 题号:165 下列定义数组的语句中正确的是()。
单选题
1、第293题 (1.0分) 题号:685 在位运算中,操作数每左移一位,其结果相当于()。
单选题
1、第292题 (1.0分) 题号:529 在C语言中,调用函数除函数名外,还必须有()。
单选题
1、第291题 (1.0分) 题号:574 若变量已正确定义并赋值,下面符合C语言语法的表达式是()。
单选题
1、第290题 (1.0分) 题号:563 以下叙述中正确的是()。
单选题
1、第289题 (1.0分) 题号:538 位字段数据的单位是()位。
单选题
1、第288题 (1.0分) 题号:137 若给定条件表达式( )?( ):( ),则其中表达式M()。
