单选题
1、第129题 (1.0分) 题号:651 以下定义语句中,错误的是()。
A
int a[]={1,2};
B
char *a[3];
C
char s[10]=“test”;
D
int n=5,a[n];
答案解析
正确答案:D
解析:
这道题考查的是 C 语言中数组定义的基本规则,特别是关于数组长度必须是**常量表达式**这一核心知识点。
我们来逐一分析各个选项:
* **A. `int a[]={1,2};`**
这是合法的。在定义数组时,如果提供了初始化列表,编译器可以根据初始值的个数自动推断数组的大小。这里数组 `a` 的大小会被确定为 2。
* **B. `char *a[3];`**
这是合法的。这定义了一个指针数组,包含 3 个元素,每个元素都是一个指向 `char` 类型的指针。数组长度明确指定为常量 3。
* **C. `char s[10]=“test”;`**
这是合法的。这定义了一个长度为 10 的字符数组,并用字符串常量 `"test"` 进行初始化。字符串 `"test"` 占据 5 个字节(包括结尾的空字符 `\0`),剩余空间会自动补零。
* **D. `int n=5,a[n];`**
这是**错误**的(在标准的 C89/C90 规范及大多数传统考试语境下)。
在 C 语言的标准规定中,定义普通局部数组时,方括号 `[]` 内的数组长度必须是一个**整型常量表达式**(Integer Constant Expression),即在编译时就能确定其值的表达式。
虽然变量 `n` 被赋值为 5,但它本质上仍然是一个**变量**。在传统的 C 标准(如 C89)中,不允许使用变量作为数组维度。
*注:虽然 C99 标准引入了变长数组(VLA),允许使用变量定义数组长度,但在计算机二级等基础 C 语言考试中,通常默认遵循 C89 标准或强调“数组长度必须为常量”这一经典规则,因此 D 被视为错误选项。*
综上所述,选项 D 违反了数组定义中长度需为常量表达式的常规要求。
**正确答案:D**
题目纠错
c语言选择判断题库
相关题目
单选题
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 下面四个选项中,均是不合法的浮点数的选项是()。
单选题
1、第122题 (1.0分) 题号:193 具有相同类型的指针变量p与数组a,不能进行的操作是()。
单选题
1、第121题 (1.0分) 题号:673 C语言规定,函数返回值的类型是由()。
