第11章结构体与共用体 §11结构体 但结构体是一种构造数据类型 「用途:把不同类型的数据组合成一个整体 自定义数据类型 ★结构体类型定义 合法标识符 可省:无名结构体 struct[结构体名 类型标识符成员名 类型标识符成员名; 成员类型可以是 struct是关键字, 基本型或构造型 不能省略
第11章 结构体与共用体 §11.1 结构体 &结构体是一种构造数据类型 &用途:把不同类型的数据组合成一个整体------- 自定义数据类型 «结构体类型定义 struct [结构体名] { 类型标识符 成员名; 类型标识符 成员名; ……………. }; 成员类型可以是 struct是关键字, 基本型或构造型 不能省略 合法标识符 可省:无名结构体
num 2字节 name 20字节 例 struct student seX 字节 int num ge 2字节 char name[20] char sex score 4字节 Int age float score, char addr301 addr 30字节 结构体类型定义描述结构 的组织形式不分配内存 结构体类型定义的作用域
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; name num sex age score addr 2字节 2字节 20字节 1字节 4字节 30字节 … ….. 结构体类型定义描述结构 的组织形式,不分配内存 结构体类型定义的作用域
§1.2结构体变量的定义 ★先定义结构体类型,再定义结构体变量 ◆一般形式 struct结构体名 类型标识符成员名; 类型标识符成员名 例 struct student struct结构体名变量名表列 int num char name [20 char sex Int age float score char addr 30 struct student stul stu2
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu1,stu2; §11.2 结构体变量的定义 «先定义结构体类型,再定义结构体变量 v一般形式: struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }; struct 结构体名 变量名表列;
★定义结构体类型的同时定义结构体变量 般形式 struct结构体名 类型标识符成员名; 类型标识符成员名 }变量名表列; 例 struct student i int num char name [ 20] char sex Int age float score char addr301 jstl, stu2
«定义结构体类型的同时定义结构体变量 一般形式: struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列; 例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
★直接定义结构体变量 般形式 struct 类型标识符成员名; 类型标识符成员名 }变量名表列; 例 struct i int num 用无名结构体直接定义 char name [ 20] 变量只能一次 char sex Int age float score char addr301 jstl, stu2
«直接定义结构体变量 一般形式: struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列; 例 struct { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2; 用无名结构体直接定义 变量只能一次
★说明 今结构体类型与结构体变量概念不同 类型∴不分配内存 变量分配内存 类型不能赋值、存取、运算;变量可以 结构体成员名与程序中变量名可相同.不会混淆 ◆成员也可以是一个结构体变量 例 例 struct student i int num char name[ 201 struct date sti i int month birthday num name int day dion rtda num nam year Int year month day year )birthday stu
«说明 v结构体类型与结构体变量概念不同 l类型:不分配内存; 变量:分配内存 l类型:不能赋值、存取、运算; 变量:可以 v结构体成员名与程序中变量名可相同,不会混淆 v成员也可以是一个结构体变量 例 struct date { int month; int day; int year; }; struct student { int num; char name[20]; struct date birthday; }stu; num name birthday month day year 例 struct student { int num; char name[20]; struct date { int month; int day; int year; }birthday; }stu; num name birthday month day year
§11.3结构体变量的引用 ★引用规则 ◆结构体变量不能整体引用只能引用变量成员 引用方式:结构体变量名.成员名 x例 struct student 结构体变量 例 struct stude stul num=10 int num 例 struct student 例 struct st int num 例 int nur char name[ 201: stul score=85.5 char sex char na struct Int age ulscore.t stu2 score int float score FM198752aiam3),(x) int d char addr 301 birthday Int stul stu2 path day year sbirthday 3Stul, stu2
§11.3 结构体变量的引用 «引用规则 v 结构体变量不能整体引用,只能引用变量成员 v可以将一个结构体变量赋值给另一个结构体变量 v结构体嵌套时逐级引用 成员(分量)运算符 优先级: 1 结合性:从左向右 引用方式: 结构体变量名.成员名 例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2; stu1.num=10; stu1.score=85.5; stu1.score+=stu2.score; stu1.age++; 例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2; printf(“%d,%s,%c,%d,%f,%s\n” ,stu1); () stu1={101, “Wan Lin” , ‘M’ ,19,87.5, “DaLian”}; () 例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2; stu2=stu1; ( ) 例 struct student { int num; char name[20]; struct date { int month; int day; int year; }birthday; }stu1,stu2; num name birthday month day year stu1.birthday.month=12; 例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2; if(stu1==stu2) …….. ()
§114结构体变量的初始化 ★形式 struct结构体名 类型标识符成员名; 类型标识符成员名; struct结构体名结构体变量={初始数据}; 例 struct student i int num char name 20 char sex: Int age char adar [30] struct student stul=(112, Wang Lin,,M, 19, 200 Beijing road)
§11.4 结构体变量的初始化 «形式一: struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }; struct 结构体名 结构体变量={初始数据}; 例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }; struct student stu1={112, “Wang Lin” , ‘M’ ,19, “200 Beijing Road”};
§115结构体数组 ★结构体数组的定义 num struct student 25B name u i int num sex char name[20] age char sex num int age name struct student stu2 seX age
§11.5 结构体数组 «结构体数组的定义 struct student { int num; char name[20]; char sex; int age; }; struct student stu[2]; num name sex age num name sex age stu[0] stu[1] 25B
★结构体数组初始化 分结数组引用 用点Am结构体数组名下标员 char name 201 char sex Int age; struct student stu[=&100, Wang Lin,,M,, 20) {101, Li Gang,M,19}, {110, Liu Yan,F,19}; 全部初始化时维数可省
«结构体数组初始化 例 struct { int num; char name[20]; char sex; int age; }stu[ ]={{……},{……},{……}}; 顺序初始化: struct student { int num; char name[20]; char sex; int age; }; struct student stu[ ]={100, “Wang Lin” , ‘M’ ,20, 101, “Li Gang” , ‘M’ ,19, 110, “Liu Yan” , ‘F’ ,19}; 例 struct student { int num; char name[20]; char sex; int age; }stu[ ]={{……},{……},{……}}; 分行初始化: struct student { int num; char name[20]; char sex; int age; }; struct student stu[ ]={{100, “Wang Lin” , ‘M’ ,20}, {101, “Li Gang” , ‘M’ ,19}, {110, “Liu Yan” , ‘F’ ,19}}; 全部初始化时维数可省 «结构体数组引用 引用方式: 结构体数组名[下标].成员名