单选题
1、第127题 (1.0分) 题号:639 以下能正确定义数组并正确赋初值的语句是()。
A
int N=5,b[N][N];
B
int a[1][2]={{1},{3}};
C
int c[2][]={{1,2},{3,4}};
D
int d[3][2]={{1,2},{34}};
答案解析
正确答案:D
解析:
这道题考查的是 C 语言中二维数组的定义及初始化规则。我们需要逐一分析每个选项,找出符合语法规范且赋值正确的语句。
**选项分析:**
* **A. `int N=5,b[N][N];`**
* **错误**。在标准的 C89/C90 中,定义数组时,方括号内的维度大小必须是**整型常量表达式**(Integer Constant Expression),不能使用变量。虽然 C99 标准引入了变长数组(VLA),允许使用变量定义数组长度,但变长数组**不能**在定义的同时进行初始化(即不能在定义时赋初值,尽管本题没写初值,但通常这类题目基于传统 C 语言标准考察)。更关键的是,即使支持 VLA,大多数基础教材和考试标准仍坚持“数组长度必须为常量”这一规则。因此,在常规考试语境下,这是错误的定义方式。
* **B. `int a[1][2]={{1},{3}};`**
* **错误**。数组 `a` 定义为 `1` 行 `2` 列。
* 初始化列表 `{{1},{3}}` 包含两个子列表 `{1}` 和 `{3}`,这意味着试图初始化**两行**数据。
* 然而,数组只定义了 **1 行** (`a[1][...]`)。提供的初始值行数超过了数组定义的行数,导致越界或语法错误。
* **C. `int c[2][]={{1,2},{3,4}};`**
* **错误**。在 C 语言中定义二维数组时,**第一维(行)的长度可以省略**(由编译器根据初始化列表自动推断),但**第二维(列)的长度绝对不能省略**。编译器需要知道每一行有多少个元素,才能正确计算内存布局和地址偏移。因此 `int c[2][]` 是非法的定义。
* **D. `int d[3][2]={{1,2},{34}};`**
* **正确**。
* 数组 `d` 定义为 `3` 行 `2` 列。
* 初始化列表 `{{1,2},{34}}` 提供了前两行的初始值:
* 第 1 行:`{1, 2}`,完全匹配列数 2。
* 第 2 行:`{34}`,只提供了一个值,第二个元素自动补零,即 `{34, 0}`。
* 第 3 行:未提供初始值,所有元素自动初始化为 0,即 `{0, 0}`。
* 这种部分初始化是合法的,且没有超出数组边界,语法完全正确。
**结论:**
只有选项 D 符合 C 语言二维数组定义和初始化的语法规则。
**正确答案:D**
题目纠错
c语言选择判断题库
相关题目
单选题
1、第132题 (1.0分) 题号:128若int类型数据占两个字节,则下列语句的输出为()。int k=-1; printf(”%d,%u\n”,k,k);
单选题
1、第131题 (1.0分) 题号:705 若有语句int *point,a=4;和 point=&a;下面均代表地址的一组选项是()。
单选题
1、第130题 (1.0分) 题号:167 下列语句中,不正确的是()。
单选题
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 下面四个选项中,均是不合法的浮点数的选项是()。
