1 / 19

第十一章 结构体与共用体

第十一章 结构体与共用体. 主要内容. 一、声明结构体类型的方法 二、定义结构体类型变量的方法 三、结构体变量的引用 四、结构体变量的初始化 五、结构体数组 六、用 typedef 定义类型. (一)什么是结构体 (二)结构体类型的声明. 一、声明结构体类型的方法. (一)什么是结构体. 结构体是一种构造类型(自定义类型) , 除了结构体变量需要定义后才能使用外,结构体的类型本身也需要声明。结构体由若干 “ 成员 ” 组成。每个成员可以是一个基本的数据类型,也可以是一个已经定义的构造类型。. struct 结构体名 { 类型 1 成员 1 ;

sahkyo
Download Presentation

第十一章 结构体与共用体

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第十一章结构体与共用体

  2. 主要内容 一、声明结构体类型的方法 二、定义结构体类型变量的方法 三、结构体变量的引用 四、结构体变量的初始化 五、结构体数组 六、用typedef定义类型

  3. (一)什么是结构体 (二)结构体类型的声明 一、声明结构体类型的方法

  4. (一)什么是结构体 结构体是一种构造类型(自定义类型),除了结构体变量需要定义后才能使用外,结构体的类型本身也需要声明。结构体由若干“成员”组成。每个成员可以是一个基本的数据类型,也可以是一个已经定义的构造类型。

  5. struct 结构体名 { 类型1 成员1; 类型2 成员2; …… 类型3 成员3; }; (二)结构体类型的声明 说明: 1、结构体名:结构体类型的名称。遵循标识符规定。 2、结构体有若干数据成员,分别属于各自的数据类型,结构体成员名同样遵循标识符规定,它属于特定的结构体变量(对象),名字可以与程序中其它变量或标识符同名。 3、使用结构体类型时,struct 结构体名作为一个整体,表示名字为“结构体名”的结构体类型。 4、结构体类型的成员可以是基本数据类型,也可以是其它的已经定义的结构体类型-结构体嵌套。结构体成员的类型不能是正在定义的结构体类型,但可以是正在定义的结构体类型的指针。 分号不可少!!!

  6. struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; 结构体类型声明举例 声明一个包含如下学生信息的结构体类型 num name sex age score addr 说明: 1、struct student是结构体类型名,struct是关键字,在声明和使用时均不能省略。 2、该结构体类型由6个成员组成,分别属于不同的数据类型,分号“;”不能省略。 3、在声明了结构体类型后,可以定义结构体变量。

  7. (一) 先声明结构体类型,再定义变量名 (二) 在声明结构体类型的同时定义变量 (三) 直接定义结构体类型变量 二、定义结构体类型变量的方法

  8. struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student student1,student2; (一) 先声明结构体类型,再定义变量名 struct结构体类型名 结构体变量名; 格式 前提:结构体类型 struct结构体类型名 已经被声明 举例

  9. (二) 在声明结构体类型的同时定义变量 举例 格式 struct 结构体类型名 { 成员列表; }结构体变量名表; struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }student1,student2; 在这里定义属于结构体类型的变量

  10. (三) 直接定义结构体类型变量 举例 格式 不出现结构体名 struct { 成员列表; }结构体变量名表; struct { int num; char name[20]; char sex; int age; float score; char addr[30]; }student1,student2; 只在这里定义属于结构体类型的变量

  11. student1.num=10010; scanf(“%s”,student1.name); student1.age++; 三、结构体变量的引用 “.”运算符是成员运算符。 格式 结构体变量名.成员名 举例 1、成员本身又是结构体类型时,子成员的访问使用成员运算符逐级访问; 例:student1.birthday.month 2、同一种类型的结构体变量之间可以直接赋值(整体赋值,成员逐个依次赋值); 例:student2=student1; 3、不允许将一个结构体变量整体输入/输出。 说明 scanf(“%d,%s,%c,%d,%f,%s”,&student1); printf(“%d,%s,%c,%d,%f,%s”,student1);

  12. 结构体变量也可以在定义时进行初始化,但是变量后面的一组数据应该用“{}”括起来,其顺序也应该与结构体中的成员顺序保持一致。结构体变量也可以在定义时进行初始化,但是变量后面的一组数据应该用“{}”括起来,其顺序也应该与结构体中的成员顺序保持一致。 四、结构体变量的初始化 #include <stdio.h> void main() { struct student{ long int num; char name[20]; char sex; char addr[20]; }a={89031,”Li Lin”,’M’,”123 Beijing Road”}; printf(“No.:%ld\nName:%s\nSex:%c\nAddr:%s”, a.num, a.name, a.sex, a.addr); } No.:89031 Name:Li Lin Sex:M Addr:123 Beijing Road 举例

  13. 五、结构体数组 概念 结构体数组指数组元素的类型为结构体类型的数组。 与定义结构体变量一样,有如下三种方法: 1、先声明结构体类型,再定义结构体数组 2、在声明结构体类型的同时定义结构体数组 3、直接定义结构体数组 定义 struct student{ long int num; char name[20]; char sex; char addr[20]; } stu[30]; struct { long int num; char name[20]; char sex; char addr[20]; } stu[30]; struct student{ long int num; char name[20]; char sex; char addr[20]; }; struct student stu[30];

  14. 初始化 与普通数组一样,结构体数组也可在定义时进行初始化。在对结构体数组初始化时,要将每个元素的数据用“{}”括起来。 初始化格式 结构体数组[n]={{初值表1},{初值表2},...,{初值表n}} 由于定义结构体数组有三种方法,因此对应的初始化形式也有三种。 举例 初始化结构体变量时,可以不指定结构体数组元素的个数,系统根据初始化列表来决定元素个数。 struct student{ long int num; char name[20]; char sex; char addr[20]; }stu[3]={{100,”Li”,’M’,”Beijing”}, {101,”Zhao”,’M’,”Hebei”}, {102,”Wang”,’M’,”Shanghai”}};

  15. 输入三个学生的信息(学号、姓名和成绩): • 张三 85 • 李四80 • 王五76 • No. Name Score • 张三 85 • 李四 80 • 104 王五 76 定义一个结构体类型struct student,包含学生的学号、姓名和成绩三项基本信息。分别读入3个学生的信息并按照表格形式显示输出。 举例 #include"stdio.h" struct student { char num[10]; char name[10]; int score; }stu[3]; void main() { int i; printf(“输入三个学生的信息(学号、姓名和成绩):\n”); for(i=0; i<3; i++) scanf("%s%s%d",stu[i].num,stu[i].name,&stu[i].score); printf("No.\tName\tScore\n"); for(i=0; i<3; i++) printf("%s\t%s\t%d\n", stu[i].num,stu[i].name,stu[i].score); }

  16. 六、用typedef定义类型 除可直接使用C提供的标准类型和自定义的类型(如结构体类型)外,也可使用typedef定义已有类型的别名。该别名与标准类型名一样,可用来定义相应的变量。 格式 typedef 类型定义 类型名; 可以是标准类型, 也可以是自定义类型。 typedef struct { int month; int day; int year; }DATE; DATE birthday; typedef int INTEGER; typedef float REAL; INTEGER i,j; REAL a,b; 举例

  17. 举例 typedef int NUM[100]; /* 定义NUM是含有100个数的整型数组类型*/ NUM n; /* 定义NUM类型(100个数的整型数组)的变量n */ typedef char* STRING; /* 定义STRING是字符指针类型 */ STRING p; /* 定义STRING类型(字符指针类型)的变量p */

  18. 说明 1、typedef是定义了一个新的类型的名字,没有建立新的数据类型,它是已有类型的别名。使用类型定义,可以增加程序的可读性,简化书写。 • 2、typedef与#define有相似之处, 如: • typedef int COUNT; • 和 #define COUNT int • 的作用都是COUNT代表int。 • 但二者是不同的:#define是在预编译时处理的,只能作简单的字符串替换;typedef是在编译时处理的,不是简单的字符串替换,如typedef int NUM[10];不是用“NUM[10]”去代替“int”,而是一种类型的声明。

  19. 作 业 P296: 11.1, 11.2, 11.3

More Related