大学课件 第十一章结构体和共用体
第11章结构体与共用体

1
结构体与共用体
1 2 3 4 5 6 7 定义结构体类型变量的方法 结构体变量的引用 结构体数组 指向结构体类型数据的指针 共用体 枚举类型 用typedef定义类型
2
结构体与共用体
概述
在当代信息处理中,往往需要处理相同的属性、不同的数据 类型,如:人事档案,涉及职员的描述和处理时,有职工的 姓名、性别、年龄、文化程度、工资、住址等数据,其中姓 名、性别、文化程度、住址属于字符型,而年龄则是整型, 工资是实型,这些不同的事物都属于同一个事物(职员)所有 ,本身有内在的关系。
17
指向结构体类型数据的指针
18
指向结构体类型变量的指针
指向结构体变量的指针
一个结构体变量的指针就是该变量所占据的内存段的起始 地址。 指针变量也可用来指向结构体数组中的元素。 C语言规定:可以把(*p).num改用p->num表示,即以下三种 形式等价: 结构变量.成员名 (*p).成员名 p->成员名(其中"->"称为指向运算符)
struct 结构体名 { 成员表列 } 变量名表列;
3. 直接定义结构类型变量:
struct { 成员表列 } 变量名表列;
7
结构体与共用体
定义结构体类型变量的方法
关于结构体类型的说明
类型与变量是不同的概念,不要混同。 通过struct定义的结构体类型和int,float等有着同等的地 位。 只能对变量赋值、存取或运算,而不能对一个类型赋值、 存取或运算。 在编译时,对类型是不分配空间的,只对变量分配内存空 间。 对结构体中的成员(即"域"),可以单独使用,它的作用与 地位相当于普通变量。 成员也可以是一个结构体变量。 成员名可以与程序中的变量名相同,二者不代表同一对象。
C语言-结构体与共用体

(1)“结构类型名”和“数据项”的命名规则,与变量 名相同。 (2)数据类型相同的数据项,既可逐个、逐行分别定义, 也可合并成一行定义。 例如,上例中的日期结构类型,也可改为如下形式: struct date {int year, month, day; }; (3)结构类型中的数据项,既可以是基本数据类型,也 允许是另一个已经定义的结构类型。 例如,上例中的结构类型std_info,其数据项“birthday” 就是一个已经定义的日期结构类型date。 (4)本书将1个数据项称为结构类型的1个成员(或分 量)。
/*主函数main()*/ main() { int i; /* 打 印 表 头 : " □" 表 示 1 个 空 格 字 符 * / printf("No.□□□□Name□□□□□Sex□Birthday\n"); /*输出三个学生的基本情况*/ for(i=0; i<3; i++) { printf("%-7s",student[i].no); printf("%-9s",student[i].name); printf("%-4s",student[i].sex); printf("%d-%d-%d\n",student[i].birthday.year, student[i].birthday.month, student[i].birthday.day); } }
11.2
定义结构体类型变量的方法
声明一个结构体类型的一般形式: struct 结构类型名 /* struct是结构类型关键字*/ {数据类型 数据项1; 数据类型 数据项2; …… …… 数据类型 数据项n; }; /* 此行分号不能少!*/
第11章结构体与共用体共39页PPT资料

13.05.2020
10
#include<stdio.h>
#include<string.h>
struct person
{char name[20];
int count;
}leader[3]={"Li",0,"Zhang",0,"Fun",0}; void main()
{int i,j;
char leader_name[20];
➢在定义时初始化(eg11.1)
struct student { int num; char name[20]; char sex;
a.num=89031; a.sex=‘M’; name如何赋初值?
char addr[20];
}aa=;{89031,"Li Lin",'M',"123 Beijing Road"};
‘M’ 59B
18
87.5
stu[0]
“123 Beijing”
10102
“zhang fun” ‘M’ 19 99
“123 shanghai”
stu[1]
3)结构体数组的应用举例 例 11.2 对候选人得票的统计程 序。有3个候选人,每次输入一个 得票的候选人的名字,要求最后输 出各人的得票结果。
结构体类型
char sex;
short int age;
13.05.2020
float score;
struct student stu;
char addr[30];
};
1
➢ 结构体类型的形式:
struct 结构体名
c语言第11章-结构体与共用体

}
§11.6 构造体和指针
ma指in向() 构造体变量旳指针
{ s❖tr定uc义t st形ud式en:t struct 构造体名 *构造体指针名; { 例lonsgtruicntt sntuudmen;t *p; char name[20]; ❖使str用ucch构tars造tsued体xe;n指t 针变存量储引构用造组体p员变形量式在内存旳起始地址
struct student stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Roa
形式二:
struct 构造体名
{ 类型标识符 组员名; 类型标识符 组员名;
……………. }构造体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”
❖用构造体变量旳组员作参数----值传递 ❖用指向构造体变量或数组旳指针作参数----地址传递 ❖用构造体变量作参数----多值传递,效率低
例 用构造体变量作函数参数
(main)
struct data { int a, b, c; };
accacbbb::::::::2332333370070
main()
}
指向构造体数组旳指针
例 指向构造体数组旳指针
struct student { int num;
char name[20]; char sex; int age;
p num
name
sex
p+1
age
结构体与共用体链表PPT优质课件

/*工资*/
float cost;
/*扣款*/
struct date hiredate; /*聘任日期*/
};
结构体类型可以嵌套定义即一个结 构体类型中的某些成员又是其他结 构体类型
结构体类型变量的定义(1)
• 先定义结构体类型,再定义结构体变量
• 一般形式
struct 结构体名
{
类型标识符 成员名;
结构体变量的初始化(3)
• 形式三
struct {
类型标识符 成员名; 类型标识符 成员名;
……………. }结构体变量={初始数据};
例 struct { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
结构体变量的初始化(2)
• 形式二
struct 结构体名 {
类型标识符 成员名; 类型标识符 成员名;
……………. }结构体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
char sex;
int age; float score; char addr[30];
用无名结构体直接定义变量,只 能一次,不能在再需要时使用所 定义的结构体类型。
}stu1,stu2;
结构体类型声明的说明
• 说明
结构体类型与结构体变量概念不同
C++课件:第11章结构体与共用体

C++课件:第11章结构体与共用体
例11.2 定义一个结构体类型,包含通讯录中的如下信息: 姓名、年龄、电话、通讯地址;并定义该类型的变量, 输入数据并输出。
程序l11_2.c
#include "stdio.h" struct address_list {char name[10];
/*{}内是该类型的各成员*/
char sex;
int age;
char position[10];
float salary; };
/*语句末尾是“;” */
该结构体类型名为struct teacher,teacher 是该结构体的标识符; 该类型包含有6个成员的数据项:name、 sex、 age、 position 和salary,其中每个成员项都有自己的类型。
}; struct teacher person; /*定义结构体变量person*/
strcpy(,"wang li");
person.sex=‘f’;
/*给各成员赋值*/
person.age=30;
strcpy(person.position,"middle");
person.salary=1600;
C++第11章结构体与共用体
C++课件:第11章结构体与共用体
1、结构体类型的定义 2、结构体变量的定义及引用 3、结构体数组 4、结构体类型的指针 5、链表的基本操作 6、共用体和枚举类型(了解)
C++课件:第11章结构体与共用体
11第十一章结构体与共用体

11第十一章结构体与共用体结构体构体结的声、明结构变体的量义以及它定们的别区结构数组体的定义、初化始应及用向结指体变构以及量指结向构数组的指针体共用体声的明其及用引方式枚举型声明及其的用方式引户用自义定型类结构的定义体构结结体构的体应用结构体变量结体构组结数构指针体结构体变量结构体与类型的区别结构体与共体用共用体的定义共用体用共体量变共用的体应结构用与体共体用区的别共用体数组共用体指枚举针的义定枚举型户用自义定类型枚举应用共用的体量变与结构类型的体别区念的概导出实际应在用,常常需将中同不类型数的组合据一个成机的有整体这。
数据些是相联互的。
系一个如学生的有信息:关nmuna e msex ***** iL inmM aeg 18adrd Dalian若使用多个变量则它,之们无间系联;若使用组数,们又它是不一同类型。
必须一种新有数类型据,它既可容纳不同型类子的,又能项将子各项联成一体。
系就这是构体结型。
类数结构据描上述信述息。
什么是结体?构构体结是一组不类型同变的的量合。
集(这些量叫成员。
) 这变是C言语提的又供种一户自定义用、含的多种有型成类的员新类型是。
又一语言种级数据构。
结同不数于组的,是构结名体不字是再地址其;成组成员可以类型各不同相即不,等再小;大只有储是存连续的。
另,外每个成员拥都有己的存自储空间由。
是于型,所以不占用存储空类,间只而是给结体构量提供了变内布存局的模版。
构体结声的声明方明式:关键s字rutct结构名{ 新体型类结构名体员成表列类型块模} 一;要有分定号结构的体成可以员变量、数组、指针、甚是至其是它结体构量,变但们已它成组一个了可不分的整割。
体如例stru:c tstudnt e{char n ame20][ ;it idn f;lot chineaes ;lfat oenlisgh ;fola taeravg; };e结构体的储存模式ame[0n] //构结体名。
ch ar/结构体/成员1/ ../ d ini // .. ftoatlc ihens e/ /.. / /. otngeisl hveeagre float.结构体变量定的义结构体变量的定有义三方种:式1.声先明结构类型体再,定义该型类量:变trust ctsudnt setu1,stu;结构体类2名结构体变型量名如同:in于数据类t型a1a,2; 变名量样这便于修做,改便于使用。
结构体与共用体.ppt

结构变量的引用
由结构体变量名引用其成员的标记形式为: 结构体变量名.成员名
其中圆点运算符是成员运算符,它的运算级 别最高
结构变量名•成员名 如 book1•num=7387221;
11
结构体型变量可以整体引用来赋值:如 book2=book1;即将变量book1的所有成员的值一一 赋给变量book2的各成员。
现在,可以重新定义结构类型struct books 如下:
5
struct date
{
int year ,month,day;
};
struct books
{ long num;
char name[50];
float price;
int total;
char author[20];
char pubass[50];
用什么样的数据类型 来存储表中每一行数据呢?
2
11.2 结构体与结构体类型变量
怎样描述图书管中某本书籍的各项数据
数据项名
• 顺序号() • 书名() • 书价() • 管藏数量() • 作者姓名() • 出版社() • 出版日期()
类型
长整型(long) 字符串 实型(float) 整型(int) 字符串 字符串 (待定)
8
形式三、直接定义结构类型变量,省略结构名:
如:struct { long num; char name[50]; float price; int total; char author[20]; char pubass[50]; struct date pubdata; } book1,book2,book3;
再用已声明的结构类型 定义结构变量:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
结构体的概念
在实际应用中,经常有一些既有联系,类型又不同 的数据需要一起处理。
如:学生基本档案的数据 字段: 学号 姓名 性别 地址 分数 类型: long char char char float
C语言允许用户按自己的需要将不同的基本类型构造成 一种特殊类型,即结构体。
数}
printf (“ \n ” ) ;
实例运行
for (i=0 ; i<3 ; i++ )
输出结果。
printf (“%5s:%d\n” , lead[i].name , lead[i].count ) ;
}
11
⒍结构体指针
概念:指向结构体变量首地址的指针称为结构体指针。结构指 针加一,地址加一个结构变量所占的字节。
int age ;
char addr [30] ;
} wang = {99010101 , “wang lin” , ‘w’ , 20 ,
“shanghai” } ;
printf("num=%ld, name=%s, sex=%c, age=%d, addr=%s",
wang.num,,wang.sex,wang.age,wang.addr);
结构体变量的说明方式: ⑴先定义后说明
struct student{
long num ;
char name[20] ;
int age ;
char add[30] ; float score ; } s; tu1,stu2,stu3;
用struct student 类型说明三个变量。
struct student stu1,stu2,stu3;
8
⒌结构体数组
结构体变量也可以构造成数组,称为结构体数组。每个数组元
素都是一个结构体变量,都含有结构体成员项。它们在内存中的地
址是连续的。 数组的说明:
struct student{
long num ;
char name[20] ;
float score ;
} stud[3] ;={{99010101 , “wang” ,67.5} ,{ },
结构体的操作分为三个步骤:
⑴根据需要定义结构体类型; ⑵通过定义的类型说明变量、数组、指针; ⑶引用变量、数组元素和指针指向的对象。
2
11.1 结 构 体
⒈结构体类型的定义
格式:
用标识符命名的结构类型名。
struct 结构名{
type 成员1 ;
结构类型中所含
结构体标志。 type 成员2 ; 的成员项及其类型。
5
⒊结构体变量的引用
结构变量都是以成员项作为引用单位,引用方式:
结构变量名.成员项名 wang.score=100;
说明:
(1)不能将一个结构体变量作为一个整体进行输入和输
出。
(2)如果成员本身又属一个结构体类型,则要用若干个
成员运算符,一级一级地找到最低的一级的成员。
stu1.age.month
void main (void)
{ int i ,j ,numb ;
for (i=0 ; i<NUMBER ; i++ )
循{
环scanf (“%d” ,&numb ) ;
输if (numb<4&&numb>0)
入
lead[numb-1] .count ++ ;
统计else 票
printf(“Selection error\n”);
…
type 成员n ;
};
例:struct student {
long num ;
char name[20] ;
int ;
};
3
⒉结构变量的说明
定义结构只是确定该结构体类型的名称及其成员项的组成和 成员项的类型。必须由定义的结构类型说明结构变量,才开辟相 应的内存空间以供使用。
float score ;
struct birth{ int year;
} stu1,stu2,stu3;
int mon;
说; 明:
int day;
⑴注意类型和变量的区别。
};
⑵成员项可单独使用。wang.age=20
⑶结构体的成员项也可以是结构变量。
结构doc中的成
员项是一个birth的
结构变量!
scanf(“%ld,%s,%d,%s,%f”,&stu1) 结构体变量的地址主要用作函数的参数,传递结构 体变量的地址。
7
⒋结构体变量的初始化
结构变量可以在说明时赋初值,称为初始化。
main()
{ struct student{
long num ; char name[20];
实例运行
char sex;
stu1.age.day stu1.age.year
6
(3)对成员变量可以像普通变量一样进行各种运算 stu2.score=stu1.score; sum=stu1.score+stu2.score; stu1.age++;
(4)可以引用成员的地址,也可以引用结构体变量 的地址。 scanf(“%ld”,&stu1.num)输; 入stu1.num的值 printf(“%o”,&stu1); 输出stu1的首地址 但不能用以下语句整体读入结构体变量,例如:
10
#include <stdio.h> /*a2.c*/
#define NUMBER 6
struct person { int num ; char name[20] ; int count ;
定义结构说 明数组并初始化。
} lead[3] = { {1 , “fun” ,0} ,{2 ,“tan” ,0 },{ 3 , “wang” , 0} } ;
说明:
{99010103 , “fun” , 98.5} } ;
⑴定义了数组stud有3个元素,每上元素都为struct student
类型
⑵结构数组名stud,代表结构数组的首地址。
9
结构体数组的应用
例:对候选人得票的统计程序。设有3个候选 人,每次输入一个得票的候选人的序号,要求最 后输出各人得票结果。
⑵定义结构类型时说明变量
变量在内存中所占的
字节数? 4
⑶无名结构方式说明变量
struct{
struct doc{
long num ;
char name[20] ;
char name[20] ;
struct birth age ;
int age ;
float sal ;
char add[30] ;
};