结构体小练习
题目描述
关于结构体表述正确的是(多选)
struct tag{
int a;
char b;
double c;
int d[3];
}list
-
#### A.以上结构体定义是正确的
-
#### B.结构体定义必须在主函数外面
-
#### C.tag是结构体变量
-
#### D.结构体占空间为25字节
-
#### E.可以直接用printf输出结构体内相应的元素
-
#### F.‘.’运算符不可以连续使用
-
#### G.以上全错
答案为 E
本次共12人作答,截至发布共5人选 到 正确答案,无人选择正确,2人未作答
选项解析
A.
以上结构体定义是错误的!
struct tag{
int a;
char b;
double c;
int d[3];
}list;
这样的结构体定义才是正确的,最后需要加’;’,这是一个标签为tag的结构体,list为这个结构体的结构体变量
B.
结构体定义不一定必须在主函数外面!
C.
tag是结构体标签,list是结构体变量
D.
结构体所占空间不是25字节,因为结构体的空间并不是简单的类型空间相加(4+1+8+3*4=25)
结构体空间有“对齐”的要求,要满足三个条件
- 首地址能够被结构体中最大成员所占字节数整除
- 每个元素相对于首地址的偏移是该元素长度的整数倍
- 结构体大小是结构体中最长基本类型所占字节的整数倍
所以这里的空间为32字节
printf("%d",sizeof(list));
运行结果:
32
E.
可以用printf输出对应元素,例如
printf("%d,%c,%lf",list.a,list.b,list.c);
F.
'.'运算符可以连续使用,例如结构体嵌套里
struct date{
int year;
int month;
int day;
};
struct time{
struct date d;
int hour;
int minute;
int second;
}t;
如上,结构体t里面嵌套了一个结构体,那么我要访问t里面的‘year’。那么就要用t.d.year
访问
G.
以上全错?
我就说我最后加了一个这选项…还真有人选了(狗头
记得好好看下,可以用‘.’运算符访问的
好好看书呀,学习的事我不再盯了,毕竟是自己的事,有不会的问题尽快问,不是说到最后一天了才说我不会2333然后就不做了。
加油加油!