结构体和共用体.doc
《结构体和共用体.doc》由会员分享,可在线阅读,更多相关《结构体和共用体.doc(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第十一章 结构体和共用体111 本章基本知识结构112 知识难点解析1结构体与共用体变量在计算机中占用多少内存?解答 结构体变量所占的内存长度等于所有各成员的长度之和,每个成员分别占有自己的内存单元;共用体变量所占的内存长度等于最长的成员的长度。2结构体和共用 体的有几种不同的引用方法?解答 结构体和共用体一样,有两种引用办法,一种是采用成员(分量)运算符“.”;还有一种是采用指针的办法。下面以结构体为例说明这两种不同的引用的方法。struct stuint num;char name10;int age; zhangsan, *lisi;要访问学生zhangsan年龄的办法有两种:zhang
2、san.age 或者(&zhangsan)age;要访问学生lisi年龄的办法也有两种:(*lisi).age 或者lisiage。113 习题1 选择题(1) 以下程序运行的输出结果是( )。main()union char i2;int m;r;r.i0=2;r.i1=0;printf(%dn,r.m);A.2 B.1 C.0 D.不确定分析、解答 答案为A。本题涉及共用体的概念。字符数组i2与整型变量m使用同一内存单元。M占用2个字节,高字节对应i1,低字节对应i0,所以答案为A。(2) 有以下程序输出结果是( )。#includestruct stuint num;char name1
3、0;int age;void fun(struct stu *p)printf(%sn,(*p).name);main()struct stu students3=9801,zhang,20,9802,Wang,19,9803,zhao,18;fun(students+2);A.Zhang B.Zhao C.Wang D.18分析、解答 答案为B。在main函数中,定义结构体类型数组student3,并赋初值。即student0=9801,zhang,20,student1=9802, wang,19,student2=9803, zhao,18,调用子函数fun,实参“student+2”为
4、student2的首地址,则p指向student2的首地址,(*p).name即“zhao”。(3) 有下列程序输出结果是( )。#include main()unionint k; char i2; *a,b; a=&b; a-i0=0x39; a-i1=0x38; printf(%xn,a-k); A.3839 B.3938 C. D.分析、解答 答案为A。题中a是指向共用体类型变量b的指针变量,整型变量k与字符数组i2共用。一个存储单元,k的高位字节对应i1,k的低位字节对应i0.“0x39”表示十六进制数的39。“%x”表示十六进制的格式输出。(4) 设有如下定义:struct num
5、 int a;float b; data,*p;若有p=&data;则对data中的a 域的正确引用是( )。A.(*p).data.a B.(*p).a C.p-data.a D.p.data.a分析、解答 答案为B。p指向结构体类型变量data的首地址,*p即代表data,因此答案为B。(5) 若有下面的说明和定义,则sizeof(struct aaa)的值是( )。struct aaa int r1;double r2;float r3;union uuu char u15;long u22;ua;mya;A.30 B.29 C.24 D.22分析、解答 答案为D。这是结构体套用共用体的
6、形式,共用体的长度为8。sizeof 为长度运算符。sizeof(struct aaa)等价于sizeof(mya)=2+8+4+8=22。(6) 设有以下定义typedef union long m;int k5;char ch; DATE;struct date int cat;DATE cow;double dog; too;DATE max;则语句printf(%d,sizeof(struct date)+sizeof(max)的执行结果是( )。A.25 B.30 C.18 D.8分析、解答 答案为B。本题用typedef声明新的类型名“DATE”来代替已有的类型名union。siz
7、eof是长度运算符。max,cow都是共用体类型,长度为“int k5”的长度,即10。所以:sizeof (struct date)+sizeof(max)=(2+10+8)+10=30。(7) 字符0的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是( )。#include main() union int i2;long m;char c4; r,*s=&r;s-i0=0x39;s-i1=0x38;printf(%cn,s-c0);A.39 B.9 C.38 D.8分析、解答:答案为B。“0x39”代表十六进制的39,即十进制的57,c0 对应i0的低字节,
8、由于十进制的57在内存中不超过8个二进制位(大于255不可),所以对应c0的就是57。而字符0的ASCII码的十进制数为48,57就对应字符9。因此答案为B。(8) 若已建立下面的链表结构,指针p,s分别指向图中所示的结点,则不能将所指的结点插入到链表末尾的语句组是( )。EF NULLhead spdata next A. s-next=null;p=p-next;p-next=s;B. p=p-next;s-next=p-next;p-next=s;C. p=p-next;s-next=p;p-next=s;D. p=(*p).next;(*s).next=(*p).next;(*p).n
9、ext=s;分析、解答:答案为C。s-next=p;p-next=s使得p,s所指的节点构成了环路而不是链表。(9)根据下面的定义,能打出字母M的语句是( )。struct student char name9;int age;struct student class10= John,17, Paul,19, Mary,18, Adam,16;A.printf(%cn,class3.name);B.printf(%cn,class3.name1);C.printf(%cn,class2.name1);D.printf(%cn,class2.name0;分析、解答:答案为 D。本题的要点是结构体
10、成员的表示。class10是结构体类型的数组,每个元素的长度是11,前9 个字符型的放名字,后两个整型的放年龄。A是指“Adam”。B是指d。C是指a。D指M。(10). 下列程序的执行结果为( )。struct str char *s;int i;struct str *sip;main() static struct str a=abcd,1,a+1,efgh,2,a+2,ijkl,3,a;struct str *p=a;int i=0;printf(%s%s%s,a0.s,p-s,a2.sip-s);printf(%d%d,i+2,-ai.i);printf(%cn,+ai.s3);A.
11、abcd abcd abcd 2 0 e B.abcd efgh ijkl 2 0 eC.abcd abcd ijkl 2 0 e D.abcd abcd abcd 2 1 e分析、解答:答案为 A。(11). 下面程序的输出结果为( )。struct st int x;int *y; *p;int data4=10,20,30,40;struct st aa4=50,&data0,60,&data1,70,&data2,80,&data3;main() p=aa;printf(%dn,+p-x);printf(%dn,(+p)-x);printf(%dn,+(*p-y);A.10 B.50
12、C. 51 D.6020 60 60 7020 21 21 31分析、解答 答案为C。本题的说明中定义了一个名为st的结构体。它由两个成员组成:一个是整型变量x;一个是指针变量。在定义的同时说明了一个指向这一结构类型的指针变量p.数组每个元素是一个含有两个成员的struct st型的结构,并赋有初值。在main函数中执行p=aa;语句后,p指向了数值的首地址,它们之间的关系如图所示:.p10aa0.x50dt0aa0.y. 20aa1.x609dt1aa1.y.30aa2.x70dt2aa2.y.dt340aa3.yaa3.x.80这里需要注意运算符的优先级,对于题目中涉及的运算符()、+、*
13、,其中括号最优先,其次是指向结构体成员运算符,下来是自增运算符+和指针运算符*,它们属于同级运算,其结合方向是“自右至左”。参照上图可知,第一条printf语句的输出项+px是先找出p(其值为50),再将其值自增1,取增值后的值,故输出51。第二条printf语句的输出项为(+p)x,它表示先将指针p自增1,指向aa数组的第二个元素aa1,然后取其第一个成员aa1.x的值。故输出为60。第三次的输出项为+(*py)。此时p已指向aa1,因此输出项等价于+(data1),先取出data1的值(20),再将其增1,故输出21。由此可见,答案C正确。(12). 设有以下语句:struct stude
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 共用
限制150内