结构体和共用体习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题六
1. 从下列四个选项中选择一个正确的填入括号中。
(1)在说明一个结构体变量时系统分配给它的存储空间是(D)。
A该结构体中第一个成员所需存储空间
B该结构体中最后一个成员所需存储空间
C该结构体中占用最大存储空间的成员所需存储空间
D该结构体中所有成员所需存储空间的总和
(2)在说明一个共用体变量时系统分配给它的存储空间是(D )。
A该共用体中第一个成员所需存储空间
B该共用体中最后一个成员所需存储空间
C该共用体中占用最大存储空间的成员所需存储空间
D该共用体中所有成员所需存储空间的总和
(3)共用体类型在任何给定时刻, (B)。
A所有成员一直驻留在内存中
B只有一个成员驻留在内存中
C部分成员驻留在内存中
D没有成员驻留在内存中
(4)以下定义结构体类型的变量st1,其中不正确的是(A )
A typedef stuct student
{
int num;
int age;
}STD;
STD st1;
B struct student
{
int num,age;
}st1;
C struct
{
int num;
float age;
}st1;
D struct student
{
int num;
int age;
};
struct student st1;
(5)已知职工记录描述为:
struct workers
{
int no;
char name[20];
char sex;
struct
{
int day;
int month;
int year;
}birth;
};
struct workers w;
设变量w中的”生日”应是”1993年10月25日”,下列对”生日”的正确赋值方式是(C)。
A day=25; month=10; year=1993;
B w.day=25w.month=10; w.year=1993;
C w.birth.day=25; w.birth.month=10; w.birth.year=1993;
D birth.day=25; birth.month=10; birth.year=1993;
(6)设有如下定义:
struct sk
{
int a;
float b;
}data,*p;
若有p=&data;则对data中的a成员的正确引用是(B)。
A (*p).data.a
B (*p).a
C p->data.a
D p.data.a
2.填空
(1)若有以下说明和定义且数组w和变量k已正确赋值,则对w数组中第k个元素中各成员的正确引用形式是w[k-1].b、w[k-1].c 、w[k-1].d 。
struct aa
{
int b;
char c;
double d;
};
struct aa w[10];
int k=3;
(2)若有以下说明和定义,则对x.b成员的另外两种引用形式是x->b-> 和p.b. 。
struct st
{
int a;
struct st *b;
}*p, x;
p=&x;
3.阅读下面程序,写出运行结果。
(1)98765432,ffffffcc
#include
main( )
{
struct byte
{
int x;
char y;
};
union
{
int i[2];
long j;
char m[2];
struct byte d;
}r,*s=&r;s->j=0x98765432;
printf("%x,%x\n",s->d.x,s->d.y);
}
(2)结果:1,minicomputer
#include
struct tree
{
int x;
char *s;
}t;
func(struct tree t )
{
t.x=10;
t.s="computer";
return(0);
}
main()
{
t.x=1;
t.s="minicomputer";
func(t);
printf("%d,%s\n",t.x,t.s);
}
#include
struct tree
int x;
char *s;
}t;
func(struct tree t )
{
t.x=10;
t.s="computer";
return(0);
}
main()
{
//t.x=1;
//t.s="minicomputer";
func(t);
printf("%d,%s\n",t.x,t.s);
}
(3)结果:34,12
#include
main()
{
union
{
char s[2];
int i;
}a;
a.i=0x1234;
printf("%x,%x\n",a.s[0],a.s[1]);
}
(4)结果:1,2,30
#include
struct st
{
int x;
int *y;
}*p;
int s[]={10,20,30,40};
struct st a[]={1,&s[0],2,&s[1],3,&s[2],4,&s[3]};
main()
{
p=a;
printf("%d,",p->x);
printf("%d,",(++p)->x);
printf("%d,",*(++p)->y);