c++8 结构与联合.ppt
文本预览下载声明
结构的概念 用 int、double 等简单数据类型,只能从一个特定的角度来描述事物,如用 int 型数据来描述一个人的年龄,用 double 型数据描述一个人的工资等; 结构是一种复合数据类型,它把若干数据(简单的或复合的)组织在一起,从而可综合地、多角度地描述事物; 结构的概念 结构示例:struct Person {??char name[10]; //姓名??bool sex; //性别??int age; //年龄??float pay; //工资}; 结构的概念 组成结构的数据称为结构的成员(或数据成员) 在某些场合,结构数据也称为记录,其成员也称为域、数据项或字段等; 通常使用结构是只定义它的数据成员,不定义它的成员函数。 结构的定义 —— 定义格式: struct 结构类型名 {? ? 成员定义1? ? 成员定义2????? ??? ????????????????? ? 成员定义n }; 结构的定义 格式中的 成员定义 与变量定义的格式基本相同,只是不允许初始化,如: 结构的定义 由于不能初始化,结构中无法定义引用成员 结构中的可以有结构成员,如:struct Person{…};struct CLASS{ //班级 char class_id[10]; //班号 Person monitor; //班长 int num_of_student;//人数}; 结构的定义 结构中可以包含指向另一结构数据的指针,例如:struct AA{…};struct BB{ int b; AA *pAA;}; 结构的定义 结构中甚至可以包含指向自身的的指针,例如:struct F{ double data; F *next;}; 结构的定义 如果两个结构都包含有指向对方的指针,则其中一个结构必须提前声明,例如:struct BB{…;AA *pa;…};struct AA{…;BB *pb;…}; 结构的定义 如果两个结构都包含有指向对方的指针,则其中一个结构必须提前声明,例如:struct BB{…;AA *pa;…};struct AA{…;BB *pb;…}; 结构体变量的定义、初始化 定义格式:【struct】结构类型名 变量名 【={初始化数据}│同类型变量名】, ? ; 举例:struct Arith{??????char op; ??????int a,b; }; 结构体变量的定义、初始化 struct Arith x,y; Arith z1={+,10,xx}, z2={*,60}, z3=z1; Arith *d=z1; Arith a[4]={ {+,3,7},{?,10,5}, {*,6,4},{/,8,5}}; Arith *b[]={z1,z2,a+2,a[3]}; 结构体变量的定义、初始化 可以在定义结构类型的同时定义结构变量,例如:struct AAA {??????char s[20];??????int top;} a1={MicroSoft,0}, a2=a1, a3, *ap; 注意: 如无特别必要,还是分开定义进行为好。 结构体变量的定义、初始化 结构类型的定义和结构变量的定义同时进行时,结构类型可以是无名的(常用于定义结构中的结构成员),例如:struct BBB {??????char name[10];??????struct{ ????????int yy,mm,dd;??????} birth;}; 结构体变量的定义、初始化 new运算符创建动态结构变量或动态结构数组,如: Airth *p = new Arith; Airth *q = new Arith [n]; delete删除占用的空间 delete p; delete [ ]q; 结构体变量的定义、初始化 用初始化数据对结构变量初始化,是将每个成员值依次复制到变量的相应域中。 当仅对结构变量的部分成员初始化时,未被初始化的成员由系统自动置为0。 全局域和文件域结构变量和static局部结构变量未被初始化时,每个成员被系统自动赋为0。 非静态的局部结构变量未被初始化时,它的每个成员的值是随意的,即不确定。 结构数据所占用的空间 结构数据所占空间的大小,理论上等于各成员大小之和。例如: sizeof(Arith) 应等于 sizeof(op) +sizeof(a) +si
显示全部