第八章结构及其它 本章的主要内容包括: ◆C语言的类型定义 ◆结构 ◆联合 ◆位运算和位段 回首页
本章的主要内容包括: C语言的类型定义 结构 联合 位运算和位段 第八章 结构及其它 回首页
8.1类型定义 写程序时自己定义的数据类型称作“用户定义类型” 形式: typedef类型名标识符; typedef的作用仅仅是用新类型名来代表已存在的类型名,并未产 生新的数据类型。原有的类型名依然有效。 新的类型名可以和C语言中原有的各种基本类名一样,方便地用于 定义变量、定义函数的返回值、定义其它构造类型的元素或成 员 B8. 1: typedef int INTEGER 给int类型一个新的名字 INTEGER,此后,可以用 INTEGER来定义整 型变量。如: INTEGER i,j,a[10]; 28. 2: typedef char CHARP 新类型名 CHARP是字符指针类型,表示的旧类型是char*。 CHaRP p 等价于:char*p; 198. 3: typedef double VECT[4] 定义一种具有4个元素的双精度数组类型VECT;程序中VECT V1,v2;定义两个4个元素的双精度数组
写程序时自己定义的数据类型称作“用户定义类型”。 形式: typedef 类型名 标识符; typedef的作用仅仅是用新类型名来代表已存在的类型名,并未产 生新的数据类型。原有的类型名依然有效。 新的类型名可以和C语言中原有的各种基本类名一样,方便地用于 定义变量、定义函数的返回值、定义其它构造类型的元素或成 员。 例8.1:typedef int INTEGER; 给int类型一个新的名字INTEGER,此后,可以用INTEGER来定义整 型变量。如:INTEGER i,j,a[10]; 例8.2:typedef char * CHARP; 新类型名CHARP是字符指针类型,表示的旧类型是char *。 CHARP p; 等价于: char *p; 例8.3:typedef double VECT[4]; 定义一种具有4个元素的双精度数组类型VECT;程序中 VECT v1,v2;定义两个4个元素的双精度数组。 8.1 类型定义
8.1类型定义 定义新类型的步骤 (1)首先按通常定义变量的方法写出定义的主体;如: double xf. (2)将变量名换成新类型名; double DoubLe (3)在最前面加上关键字 typedef typedef double doubLe (4)可以用新类型定义变量了; PDOUBLE flf2 讨论自定义数据类型的作用
定义新类型的步骤: (1) 首先按通常定义变量的方法写出定义的主体;如: double *f; (2) 将变量名换成新类型名; double *PDOUBLE; (3) 在最前面加上关键字typedef; typedef double *PDOUBLE; (4) 可以用新类型定义变量了; PDOUBLE f1,f2; 讨论自定义数据类型的作用 8.1 类型定义
8.2结构 结构可以将若干个不同类型的数据组合成一个复合数据对象。组 成结构的数据项称结构的成分或成员。 结构类型成员的数量必须固定,但该结构中各个成员的类型可以 不同。 8.21结构类型说明、结构变量定义 ●8.2.1.1结构类型说明 struct结构名{成员说明序列}; 结构名是结构类型说明的标志,如果所定义的结构类型,在程序 中很少使用,可以省略结构名,在说明类型的同时定义结构变 量;如果所定义的结构类型,在程序中要多次使用,应该使用 结构名说明结构类型,以后在程序需要该结构类型的地方,用 “ struc t结构名”的形式代表整个说明。相当于一个类型名
结构可以将若干个不同类型的数据组合成一个复合数据对象。组 成结构的数据项称结构的成分或成员。 结构类型成员的数量必须固定,但该结构中各个成员的类型可以 不同。 8.2.1 结构类型说明、结构变量定义 8.2.1.1 结构类型说明 struct 结构名 {成员说明序列}; 结构名是结构类型说明的标志,如果所定义的结构类型,在程序 中很少使用,可以省略结构名,在说明类型的同时定义结构变 量;如果所定义的结构类型,在程序中要多次使用,应该使用 结构名说明结构类型,以后在程序需要该结构类型的地方,用 “struct 结构名”的形式代表整个说明。相当于一个类型名。 8.2 结构
8.2结构 例日期可以用包含三个成员的结构来描述: struct date t int year, month, day: 学生信息的结构类型可说明如下: struct student i char name [ 15] char sex: struct date birthday float score 4 其中 struct date是一个已说明过的结构类型名
例日期可以用包含三个成员的结构来描述: struct date { int year, month, day; }; 学生信息的结构类型可说明如下: struct student { char name[15]; char sex; struct date birthday; float score[4]; }; 其中struct date是一个已说明过的结构类型名。 8.2 结构
8.2结构 8.2.1.2结构变量定义 结构变量定义有4种方法: (1)直接定义结构类型变量,将一个结构说明当成类 型描述,在它后面列出变量标识符。这种表示方法 没有结构名,定义形式如下: struct(成员说明序列}结构变量表; 例: struct i char name [10 int age; int class I stul, stu2 [5, *stu3
8.2.1.2结构变量定义 结构变量定义有4种方法: (1) 直接定义结构类型变量,将一个结构说明当成类 型描述,在它后面列出变量标识符。这种表示方法 没有结构名,定义形式如下: struct {成员说明序列} 结构变量表; 例:struct { char name[10]; int age; int class; } stu1,stu2[5],*stu3; 8.2 结构
8.2结构 8.2.1.2结构变量定义 结构变量定义有4种方法: (2)声明类型同时,定义结构变量 struct结构名{成员说明序列}结构变量表; 例: struct point{ oubeⅩ,y,z pl,p2,*p3 说明结构类型 point,并定义三个变量
8.2.1.2结构变量定义 结构变量定义有4种方法: (2) 声明类型同时,定义结构变量 struct 结构名 {成员说明序列} 结构变量表; 例:struct point { double x, y, z; } p1,p2,*p3; 说明结构类型point, 并定义三个变量。 8.2 结构
8.2结构 8.2.1.2结构变量定义 结构变量定义有4种方法: (3)使用已声明的结构类型,定义结构变量 struct结构类型名结构变量表; 例:使用上面的例子中说明的 struct point struct point p1, p2[5], *p 3 (4)定义结构类型,再定义结构变量 typedef struct{成员说明序列}结构类型名 结构类型名结构变量表;
8.2.1.2结构变量定义 结构变量定义有4种方法: (3) 使用已声明的结构类型,定义结构变量 struct 结构类型名 结构变量表; 例:使用上面的例子中说明的struct point。 struct point p1,p2[5],*p3; (4) 定义结构类型,再定义结构变量 typedef struct {成员说明序列} 结构类型名; 结构类型名 结构变量表; 8.2 结构
8.2结构 8.2.1.3结构的实现 C语言为结构对象分配足够大的存储空间,顺序地放入 各个成员,但具体的存储位置,由一组对齐规则来 调整,结构里的成员未必一个紧接着一个存放,它 们之间可能有空位 结构类型和结构变量的空间计算: sizeof 讨论结构存储中使用对齐原则的原因
8.2.1.3结构的实现 C语言为结构对象分配足够大的存储空间,顺序地放入 各个成员,但具体的存储位置,由一组对齐规则来 调整,结构里的成员未必一个紧接着一个存放,它 们之间可能有空位。 结构类型和结构变量的空间计算:sizeof 讨论结构存储中使用对齐原则的原因 8.2 结构
8.2结构 8.2.2结构变量的初始化和使用 8.2.2.1结构变量的初始化 可以在定义的同时初始化,使用将变量的成员的初始化值组合 起来。 如 struct point{ double x,y }pl={1.5,4,6},p[3]={1.5,2.5},{3.4,2.4},{8.6,9.0} 初始化描述中的初始值将顺序提供给结构变量的各基本成员,初 始化表达式只能是可静态求值的表达式。给出的初始化数据与 结构成员类型一致,个数不得多于成员数量,如果提供的数据 项不够,与数组的规定一样,其余成员自动用0初始化。 如果定义时没有提供初始值,系统对结构变量的处理方式与其它 变量一样。外部和全局变量,用0初始化,自动变量不进行初 始化,各成员的状态不确定
8.2.2 结构变量的初始化和使用 8.2.2.1 结构变量的初始化 可以在定义的同时初始化,使用{}将变量的成员的初始化值组合 起来 。 如 struct point { double x,y; } p1={1.5,4,6},p[3]={{1.5,2.5},{3.4,2.4},{8.6,9.0}}; 初始化描述中的初始值将顺序提供给结构变量的各基本成员,初 始化表达式只能是可静态求值的表达式。给出的初始化数据与 结构成员类型一致,个数不得多于成员数量,如果提供的数据 项不够,与数组的规定一样,其余成员自动用0初始化。 如果定义时没有提供初始值,系统对结构变量的处理方式与其它 变量一样。外部和全局变量,用0初始化,自动变量不进行初 始化,各成员的状态不确定。 8.2 结构