单选题
1、第298题 (1.0分) 题号:537 在定义构造数据类型时,不能()。
A
说明变量
B
说明存储类型
C
初始化
D
末尾不写分号
答案解析
正确答案:D
解析:
**解析:**
在 C 语言中,构造数据类型(如结构体 `struct`、联合体 `union`、枚举 `enum`)的定义遵循特定的语法规则。我们需要分析各个选项在定义类型时的合法性:
1. **关于选项 A(说明变量)**:
在定义构造数据类型的同时,是可以声明该类型的变量的。例如:
```c
struct Student {
int id;
char name[20];
} stu1, stu2; // 这里同时定义了结构体类型并声明了变量 stu1 和 stu2
```
因此,定义时说明变量是**允许**的。
2. **关于选项 B(说明存储类型)**:
同样,在定义类型的同时声明变量时,也可以指定变量的存储类型(如 `static`、`extern` 等,尽管 `extern` 通常用于声明而非定义,但在某些上下文或针对静态存储期变量是合法的)。例如:
```c
static struct Data {
int x;
} myData; // 合法,指定了静态存储类型
```
因此,这通常也是**允许**的(取决于具体语境,但相比 D 选项,这不是语法错误的关键点)。
3. **关于选项 C(初始化)**:
在定义构造数据类型的同时声明变量,是可以对变量进行初始化的。例如:
```c
struct Point {
int x;
int y;
} p1 = {10, 20}; // 合法,对变量 p1 进行了初始化
```
因此,初始化是**允许**的。
4. **关于选项 D(末尾不写分号)**:
这是 C 语言语法的硬性规定。构造数据类型的定义语句必须以分号 `;` 结尾。如果遗漏分号,编译器会报错。例如:
```c
struct Test {
int a;
} // 错误!缺少分号
```
正确的写法必须是:
```c
struct Test {
int a;
}; // 正确,必须有分号
```
因此,在定义构造数据类型时,**不能**末尾不写分号。
**结论:**
题目问的是“不能”做什么。选项 A、B、C 都是在定义类型时可能伴随的合法操作(针对同时声明的变量),而选项 D 违反了基本的语法规则,会导致编译错误。
故正确答案为 **D**。
题目纠错
c语言选择判断题库
相关题目
单选题
1、〖第1题〗543) 若有int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则输出结果不为5
单选题
1、〖第20题〗96) 若有下列定义,则对a数组元素地址的正确引用是()。 int a[5],*p=a;
单选题
1、〖第19题〗13) 执行下列语句后变量x和y的值是()。y=10;x=y++;
单选题
1、〖第18题〗21) 以下不符合C语言语法的赋值语句是()。
单选题
1、〖第17题〗89) 以下标识符中,不能作为合法的C用户定义标识符的是()。
单选题
1、〖第16题〗202) 设有如下定义: struct sk {int a; float b;} data,*p;
单选题
1、〖第15题〗33) 若有以下定义:char s='\092'; 则该语句()。
单选题
1、〖第14题〗211)fgets(str,n,fp)函数从文件中读入一个字符串,以下正确的叙述是()。
单选题
1、〖第13题〗205) 变量p为指针变量,若p=&a,下列说法不正确的是()。
单选题
1、〖第12题〗22) 以下不符合C语言语法的赋值语句是()。
