AI智能推荐题库-试题通 AI智能整理导入题库-试题通
×
首页 题库中心 c语言选择判断题库 题目详情
CA4E3A01C46000013755684012D01E55
c语言选择判断题库
379
单选题

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语言选择判断题库

扫码进入小程序
随时随地练习

关闭登录弹窗
专为自学备考人员打造
勾选图标
自助导入本地题库
勾选图标
多种刷题考试模式
勾选图标
本地离线答题搜题
勾选图标
扫码考试方便快捷
勾选图标
海量试题每日更新
波浪装饰图
欢迎登录试题通
可以使用以下方式扫码登陆
APP图标
使用APP登录
微信图标
使用微信登录
试题通小程序二维码
联系电话:
400-660-3606
试题通企业微信二维码