高级程序设计语言 吴凡 TEL:83202682 E-mail:cdwf@tom.com
高级程序设计语言 吴 凡 TEL: 83202682 E-mail: cdwf@tom.com
第十一章结构体与共用体 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 第十一章 结构体与共用体
引例 有时需要将不同类型的数据组合成一个 有机整体 例:一个学生信息 学号( nt num), ●姓名( char name[), 成绩( oat score) ●结构体:若干数据类型(可以不同)的 集 属于构造类型——需要用户定义结构体类型 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 引例 ⚫ 有时需要将不同类型的数据组合成一个 有机整体 ⚫ 例:一个学生信息: ⚫ 学号(int num), ⚫ 姓名(char name[]), ⚫ 成绩(float score) ⚫ 结构体:若干数据类型(可以不同)的 集合 ⚫ 属于构造类型——需要用户定义结构体类型
定义结构体类型 可省略:无名 ●格式: 结构体 struct结构体类型名{ struc 线德类型说明成员名; 字,不能省略 类型说明成员名; 成员类型可以是 基本类型,也可 以是构造类型 例 struct studenti int number; char name[10]; float score 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 定义结构体类型 ⚫ 格式: struct 结构体类型名{ 类型说明 成员名; 类型说明 成员名; ... } ⚫ 例: struct关键 字,不能省略 可省略:无名 结构体 成员类型可以是 基本类型,也可 以是构造类型 struct student{ int number; char name[10]; float score; }
定义结构体变量 ●方法1:先定义结构体类型,再定义结构体 变量 般形式: struct结构体类型名{ 成员列表 struc结构体类型名变量名 例: struct student int number char name[10]; float score struct student stul, stu2 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 定义结构体变量 ⚫ 方法1:先定义结构体类型,再定义结构体 变量 ⚫ 一般形式: struct 结构体类型名{ 成员列表 }; struct 结构体类型名 变量名; ⚫ 例:struct student{ int number; char name[10]; float score; }; struct student stu1, stu2;
定义结构体变量 ●方法2:定义结构体类型的同时定义结构体 变量 般形式: struct结构体类型名{ 成员列表 }变量名列表; 例: truct student int number i char name[10]i float score; Istul stu2 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 定义结构体变量 ⚫ 方法2:定义结构体类型的同时定义结构体 变量 ⚫ 一般形式: struct 结构体类型名{ 成员列表 } 变量名列表; ⚫ 例:struct student{ int number; char name[10]; float score; }stu1, stu2;
定义结构体变量 ●方法3:直接定义结构体变量 般形式 struct i 成员列表 }变量名列表 例 trust int number i char name[10]i float score; Istul stu2 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 定义结构体变量 ⚫ 方法3:直接定义结构体变量 ⚫ 一般形式: struct { 成员列表 } 变量名列表; ⚫ 例: struct{ int number; char name[10]; float score; }stu1, stu2;
int number 定义结构体变量 char name [10] ●注意: float score ●结构体变量的成员在连续内存空 int month 间中存储 int day ●结构体类型与结构体变量的区别: 先定义结构体类型,再定义结构体 int year 变量 struct date i 定义结构体类型时不需要分配空间 int month 定义结构体变量时才分配空间 int day ●结构体类型可以嵌套定义:结构 int yeari 体成员类型可以是一个结构类型 struct student[ ●结构体成员名与结构体变量可以 int number 同名 char name [101; float score struct date birthday 电子科技大学通信与信息工程学]stu1,stu2;
电子科技大学通信与信息工程学院 定义结构体变量 ⚫ 注意: ⚫ 结构体变量的成员在连续内存空 间中存储 ⚫ 结构体类型与结构体变量的区别: ⚫ 先定义结构体类型,再定义结构体 变量 ⚫ 定义结构体类型时不需要分配空间, 定义结构体变量时才分配空间 ⚫ 结构体类型可以嵌套定义:结构 体成员类型可以是一个结构类型 ⚫ 结构体成员名与结构体变量可以 同名 struct date{ int month; int day; int year; }; struct student{ int number; char name[10]; float score; struct date birthday; }stu1, stu2; int number char name[10] float score int month int day int year
结构体变量的引用 ●引用形式:结构体变量名成员名 ●规则 对结构体变量的引用(包括赋值、输入、输出 运算等)只能通过结构变量的成员来实现,而 不能结构体变量视为一个整体来处理。 ●例外:具有相同类型的结构变量可以相互赋值 例:stu1num=22; printf(student's name %s", stu1 name) stu1= stu2 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 结构体变量的引用 ⚫ 引用形式:结构体变量名.成员名 ⚫ 规则: ⚫ 对结构体变量的引用(包括赋值、输入、输出、 运算等)只能通过结构变量的成员来实现,而 不能结构体变量视为一个整体来处理。 ⚫ 例外:具有相同类型的结构变量可以相互赋值 ⚫ 例:stu1.num = 22; printf("student's name %s\", stu1.name); stu1 = stu2;
结构体变量的引用 ●规则: ●如果是结构体类型是嵌套定义的,需要使用成 员员算符(.)逐级引用 ●例:stu1um=10; stu1 birthday month =10; stu1 birthday day =1 结构体变量的成员可以像普通变量一样运算 ●例:stu1age++;Stu1.scor+=20; ●可以引用结构体变量成员的地址,也可以引用 结构体变量的地址 电子科技大学通信与信息工程学院
电子科技大学通信与信息工程学院 结构体变量的引用 ⚫ 规则: ⚫ 如果是结构体类型是嵌套定义的,需要使用成 员员算符(.)逐级引用 ⚫ 例:stu1.num = 10; stu1.birthday.month = 10; stu1.birthday.day = 1; ⚫ 结构体变量的成员可以像普通变量一样运算 ⚫ 例:stu1.age++; stu1.scor += 20; ⚫ 可以引用结构体变量成员的地址,也可以引用 结构体变量的地址