第11章 结构体与共用休

合集下载

第11章 结构体与共用体

第11章  结构体与共用体

struct
{
{
{
unsigned int No;
unsigned int No;
unsigned int No;
char name[32];
char name[32];
char name[32];
unsigned short age;
unsigned short age; unsigned short age;
stu1.score = 20.0; sizeof(struct student)
} stu1, stu2;
}
106
2. 定义结构体类型变量的方法
说明:
• 类型与变量是不同概念; • 结构体成员可以单独使用; • 成员也可以是结构体变量;
• 成员名称可以与程序中的其它变量名称相同,是两个 不同的对象。
声明后的结构体类型就可以同其它 的数据类型一样用来定义变量等。
结构体中的成员可以是一个简单的 基本类型,也可以是复杂的构造类 型。
类型与变量是不同的概念,这里只 是定义了类型,尚未定义变量,因 此未分配内存空间。
例如: struct School {
char name[32]; int num_staff; int type; };
struct data struct student
{ int month; {
birthday
int day;
unsigned iNnot Nnoam; e age
score month
day
year
int year; char name[32];
};
unsigned short age;
float score;

第11章结构体与共用体

第11章结构体与共用体
第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语言编程:第十一章结构体与共用体

C语言编程:第十一章结构体与共用体
• 例如:表示一个学生的有关信息(学号,姓名,性 别 年龄,总分,地址),其具体数据情况如图所 示: num name sex age score addr
10010 Li Fun M 18 87.5 Bejing
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@
11.3 结构体变量的引用
结构体变量的引用应该遵循以下原则 • 1)不能将一个结构体变量作为一个整体进行输入和
2)结构体名同标识 符命名规则;
3)分号不能省略
4)成员列表又称“域表”,每个成员也称为域。
5)指定一个结构体类型相当于指定了一个模型,它无 数据,系统对其不分配实际内存单元。
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@
struct { int num;
char name[10]; char sex;
int age; float score; char addr[30]; } student1,student2;
(3)
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@

第11章结构体与共用体-精品

第11章结构体与共用体-精品

:
}}
2019/11/4
16
2、结构传递(全体传递,多值传递): 用结构变量作实参
将结构变量所占的内存单元内容全部顺序传递给形参(值 传递),由于采用值传递内存开销大、在被调函数中改变 的形参值不能返回主调用函数,因此在使用上很不方便。 eg11.5.c
3、传引用调用(地址传递): 定义结构指针变量并以此指针作为实参
};
struct student stu_1; struct student *p; p=&stu_1;
stu_1.num=89031;
strcpy(stu_,"Li Lin");
stu_1.sex='M'; stu_1.score=89.5;
printf("NO.:%ld\nname:%s\nsex:%c\nscore:%f\n",
30字4 节
2、定义结构体的同时定义结构变量: struct student {………
}studend1, student[2];(变量表列)
3、直接定义结构体变量: struct {……… }studend1, student[2];
注意 (1)类型与变量是不同的概念;
2019/11/4
(2)对结构中的成员可以单独使用; (3)成员可以是结构变量;
从而完成将结构变量的指针传给函数。主调函数和被调函 数共用一段内存空间。
eg11.6.c
用指针作函数参数能提高程序运行效率,有时节约内存。
2019/11/4
17
• 11.8 共用体
构造数据类型,也叫联合体
用途:使几个不同类型的变量共占一段内存(相互覆盖)
– 共用体类型定义

第11章结构体及共用体

第11章结构体及共用体
14
3)用结构体变量和指向结构体的指针作函数参数
把结构传递给函数有三种方式: 单个成员 整个结构 指向结构的指针
1、成员传递:用结构变量成员作为实参(值传递)
例如:对于上面定义的结构变量stu_1有四个成员。 其中任何一个都可以做实参。
void main()
{……
{ prin(stu_1.num);
低一级的成员,对它进行赋值或存取以及运算. student1.birthday.month student1.birthday
3)成员可以像普通变量一样进行各种运算.
student2.score= student1.score;
2020/10/1s3tudent1.age++;
6
11.4 结构体变量的初始化
:
}}
2020/10/13
15
2、结构传递(全体传递,多值传递): 用结构变量作实参
将结构变量所占的内存单元内容全部顺序传递给形参(值 传递),由于采用值传递内存开销大、在被调函数中改变 的形参值不能返回主调用函数,因此在使用上很不方便。 eg11.5.c
3、传引用调用(地址传递): 定义结构指针变量并以此指针作为实参
例 paaa––r...upiicf}nn=不可==h;ti&11=fo能以f(;.‘nla“5ao用在例;%;d’a;一定atdt例f”例a个义;u{,}aan共共a.,iib=fuu{o){}ai用 用cfl,;n}n{nnolc=haoai1it,a体 体;ao1o*a,icftibri’nn;npt;l变 变hnao;ctx,fat’da;h量 量i;,rit;[1;;3cf时 为.(5]h;;c};另初编h(;a一始(d译)r*[个化cp(0通h)]变..;)ii过量fl(,o赋d*a[p值运t0)]f..c;行chh结(*果pd)[.不0f].对f ) a.i=1; a.ch=‘a’; a.f=1.5;

第11章结构体与共用体共39页PPT资料

第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章-结构体与共用体

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

C++课件:第11章结构体与共用体

C++课件:第11章结构体与共用体
person={“li li”,’f’, 24, “primary”,1000}; 错!
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章结构体与共用体
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

定义结构体类型的同时定义结构体变量
一般形式:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
num
25B
name sex age num
name sex age
stu[0]
stu[1]
结构体数组初始化
分行初始化: 结构体数组引用 顺序初始化: struct student struct student 引用方式: 结构体数组名[下标].成员名 { int num; 例 { int student struct num; 例 struct num; char { char name[20]; int name[20]; stu[1].age++; struct student { char num; int sex; char sex; name[20]; int age; num; {char name[20]; int int age; char sex; }; char sex; }; int char name[20]; age; struct student stu[ ]={{100,“WangLin”,„M‟,20, int char sex; age; struct student stu[ ]={100,“Wang Lin”,„M‟,20}, }stu[ ]={{……},{……},{……}}; {101,“LiGang”,„M‟,19, int age; }stu[ ]={{……},{……},{……}}; 101,“Li Gang”,„M‟,19}, strcpy(stu[0].name,”ZhaoDa”); {110,“LiuYan”,„F‟,19}; }str[3]; 110,“Liu Yan”,„域
结构体类型定义描述结构 的组织形式,不分配内存
§11.2 结构体变量的定义
先定义结构体类型,再定义结构体变量
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; 例 #define ……………. STUDENT struct student }; STUDENT struct student struct 结构体名 变量名表列;
直接定义结构体变量
一般形式:
struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列; 用无名结构体直接定义 变量只能一次
例 struct { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
形式二:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,„M‟,19, “200 Beijing Road”};
一般形式:

{ int num; int num; char name[20]; char name[20]; char sex; char sex; int age; int age; float score; float score; char addr[30]; char addr[30]; }; }; STUDENT stu1,stu2; struct student stu1,stu2; {
成员类型可以是 基本型或构造型
num
2字节

name
20字节 1字节 2字节 4字节
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
sex age score
…..
指向结构体数组的指针
例 指向结构体数组的指针 struct student p num { int num; name char name[20]; sex char sex; age p+1 int age; }stu[3]={{10101,"Li Lin",'M',18}, {10102,"Zhang Fun",'M',19}, {10104,"Wang Min",'F',20}}; main() { struct student *p; for(p=stu;p<stu+3;p++) printf("%d%s%c%d\n",p->num,p->name,p->sex,p->age); }
§11.5 结构体数组
结构体数组的定义
三种形式:
形式三: 形式二: 形式一: struct student struct student { int num; char name[20]; char sex; int age; }stu[2]; }; struct student stu[2];
§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”};
形式三:
struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据};
例 struct { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,„M‟,19, “200 Beijing Road”};
§11.3 结构体变量的引用
引用规则
结构体变量不能整体引用,只能引用变量成员
引用方式: 结构体变量名.成员名
例 struct 成员(分量)运算符 student 可以将一个结构体变量赋值给另一个结构体变量 例 struct student { stu1.num=10; int num; 优先级: 结构体嵌套时逐级引用 1 { int num; 例 struct student 结合性:从左向右 { char name[20]; int num; 例 struct name[20]; char sex; char student char name[20]; stu1.score=85.5; 例 structchar num; student { int sex; int char sex; age; printf(“%d,%s,%c,%d,%f,%s\n”,stu1); () if(stu1==stu2) { int age; num; stu1.birthday.month=12; char name[20]; float score; int …….. () stu1.score+=stu2.score; char score; name[20]; int age; struct float date char addr[30]; stu1.age++; float score; char addr[30]; stu1={101,“Wan Lin”,„M‟,19,87.5,“DaLian”}; () sex; { int char month; }stu1,stu2; addr[30]; char birthday int age; int }stu1,stu2; day; num name float score; }stu1,stu2; month day year int year; stu2=stu1; ( ) char addr[30]; }birthday; }stu1,stu2; }stu1,stu2;
第十一章 结构体与共用体
§11.1 结构体
结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体------自定义数据类型 结构体类型定义 合法标识符
可省:无名结构体
struct [结构体名] { 类型标识符 成员名; 类型标识符 成员名; ……………. };
struct是关键字, 不能省略
count 0
0 0
§11.6 结构体和指针
main() 指向结构体变量的指针 { struct student 定义形式:struct 结构体名 *结构体指针名; { 例 struct student *p; long int num; char name[20]; 使用结构体指针变量引用成员形式 struct student 存放结构体变量在内存的起始地址 char sex; p num { score; float int num; (*结构体指针名).成员名 结构体指针名->成员名 例 int n; struct student 结构体变量名.成员名 namestu1; char name[20]; }stu_1,*p; stu int *p=&n; struct student sex *p=&stu1; 例 p=&stu_1;char sex; 指向结构体的指针变量 *p=10; 指向运算符 stu1.num=101; age (*p).num=101 n=10 int age; stu_1.num=89101; }stu; 优先级: 1 strcpy(stu_,"Li Lin"); 结合方向:从左向右 struct student *p=&stu; p->sex='M'; p->score=89.5; printf("\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n", (*p).num,p->name,stu_1.sex,p->score); }
相关文档
最新文档