当前位置:首页 >> 其它课程 >>

结构体


第10章 结构体与共用体
10.1.1 结构体概述

10.1.2结构体变量的定义

10.1 结构体

10.1.3 结构体变量的引用 10.1.4 结构体变量的初始化 10.1.5 结构体数组

10.2 共用体

10.1.6 结构体指针

1

10.1.1 结构体概述
结构体是一种构造数据类型 ? 用途:把不同类型的数据组合成一个 整体-------自定义数据类型 ? 结构体类型定义 合法标识符
?

struct是关键字, 不能省略

struct [结构体名] { 类型标识符 成员名; 类型标识符 成员名; ……………. };

可省:无名结构体 成员类型可以是 基本型或构造型

2

例子图解
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };

num

2字节

… …..

name sex age score

20字节 1字节 2字节 4字节

addr

30字节

结构体类型定义的作用域

结构体类型定义描述结构 的组织形式,不分配内存

3

10.1.2 结构体变量的定义
1 先定义结构体类型,再定义结构体变量
? 一般形式:

struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }; struct 结构体名 变量名表列;
4

2、定义结构体类型的同时定义结构体变量
一般形式:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;

例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;

5

3、直接定义结构体变量
一般形式: struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列; 用无名结构体直接定义 变量只能一次

例 struct { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;

6

说明: 结构体类型与结构体变量概念不同

类型:不分配内存; 变量:分配内存 类型:不能赋值、存取、运算; 变量:可以 结构体可嵌套

7

10.1.3 结构体变量的引用
?

引用规则 ? 结构体变量不能整体引用,只能引用变量成员

引用方式:

结构体变量名.成员名
成员(分量)运算符 优先级: 1 结合性:从左向右

可以将一个结构体变量赋值给另一个结构体变量 结构体嵌套时逐级引用
8

10.1.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”}; 9

结构体变量的初始化形式二:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据};

例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,?M?,19, “200 Beijing Road”};
10

结构体变量的初始化形式三:
struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据}; 例 struct { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,?M?,19, “200 Beijing Road”};
11

10.1.5 结构体数组
1、结构体数组的定义的三种形式:
形式一: struct student 形式二 : { int student num; struct 形式三 : name[20]; char { int num; struct char char sex; name[20]; { int num; int age; char sex; name[20]; }; char int age; char sex; stu[2]; struct student }stu[2]; int age; }stu[2];
num 25B name sex age num name sex age stu[1] stu[0]

12

2、结构体数组初始化及引用

引用方式: 结构体数组名[下标].成员名
例 struct stu[1].age++; { int num; char name[20]; struct student { char intsex; num; int char age; name[20]; }stu[ ]={{……},{……},{……}}; char sex; int age; }str[3]; strcpy(stu[0].name,”ZhaoDa”);

13

例 统计后选人选票
struct person name { char name[20]; Li int count; Zhang }leader[3]={“Li”,0,“Zhang”,0,”Wang“,0}; main() Wang { int i,j; char leader_name[20]; for(i=1;i<=10;i++) { scanf("%s",leader_name); for(j=0;j<3;j++) if(strcmp(leader_name,leader[j].name)= =0) leader[j].count++; } for(i=0;i<3;i++) printf("%5s:%d\n",leader[i].name,leader[i].count); }
count 0

0 0

14

10.1.6 结构体和指针
指向结构体变量的指针
定义形式:struct 结构体名 *结构体指针名;
例 struct student *p;

存放结构体变量在内存的起始地址 struct student { int num; char name[20]; char sex; int age; }stu; struct student *p=&stu;
p

num name sex age

stu

例 指向结构体的指针变量
15

使用结构体指针变量引用成员形式 例 int n; int *p=&n; *p=10; ? n=10
(*结构体指针名).成员名

struct student stu1; struct student *p=&stu1; stu1.num=101; ? (*p).num=101
结构体变量名.成员名

结构体指针名->成员名

指向运算符 优先级: 1 结合方向:从左向右

16

思考:右图如何通过语句实现?
元素/结点 元素/结点 元素/结点

9901

9910

9950

struct student { int num; float aver; stu1.num=9901;stu1.aver=89.5; struct student *next; }; stu2.num=9910;stu2.aver=90; student stu1,stu2,stu3,*p; stu3.num=9950;stu3.aver=97.5; stu1.next=&stu2;stu2.next=&stu3; p=&stu1;

89.5

90

97.5

/* next 是指向该结构体类型的指针变量, 用来存放下一个结点的起始地址,实现将各结点连接成链 */
17

10.2 共用体
?构造数据类型,也叫联合体
?用途:使几个不同类型的变量共占一段内存(相互覆盖)
?

1 共用体类型定义
定义形式:
union 共用体名 {

类型标识符 成员名; 类型标识符 成员名; …………….

例 union data { int i; char ch; float f; };

}; i 类型定义不分配内存

ch f
18

共用体变量的定义
形式一: union data { int i; char ch; float f; }a,b;
i ch f

形式二: union data { int i; char ch; float f; }; union data a,b,c,*p,d[3];
i ch f

形式三: union { int i; char ch; float f; }a,b,c;

a
共用体变量任何时刻 只有一个成员存在

b
共用体变量定义分配内存, 长度=最长成员所占字节数

19

2 共用体变量引用
引用方式: 共用体变量名.成员名 共用体指针名->成员名
(*共用体指针名).成员名

union data a.i a.ch a.f { int i; p->i p->ch p->f char ch; float f; (*p).i (*p).ch (*p).f }; union data a,b,c,*p,d[3]; d[0].i d[0].ch d[0].f

20

引用规则 不能引用共用体变量,只能引用其成员 例 union { int i; char ch; float f; }a; a=1; ( ?)

共用体变量中起作用的成员是最后一次存放的成员
例 a.i=1; a.ch=?a?; a.f=1.5; printf(“%d”,a.i);

(?编译通过,运行结果不对)
21

可以用一个共用体变量为另一个变量赋值
例 float x; union { int i; char ch; float f; }a,b; a.i=1; a.ch=?a?; a.f=1.5; b=a; (?) x=a.f; (?)

不能在定义共用体变量时初始化
例 union { int i; char ch; float f; }a={1,?a?,1.5};

( ?)
22

小结:结构体与共用体
区别: 存储方式不同

联系: 两者可相互嵌套
struct node { char ch[2]; int k; }a; union node { char ch[2]; int k; }b;
变量的各成员同时存在

ch k

a

ch k

b
任一时刻只有一个成员存在

23

(49)设有如下定义: struct sk {int a;float b;}data,*p; 若有p=&data;,则对data中的a域的正确引用是 A)(*p).data.a C)p->data.a B)(*p).a D)p.data.a
24

有以下说明和定义 C union dt {int a;char b;float c;}data; 以下叙述中错误的是
A)data的每个成员起始地址都相同 B)变量data所占的内存字节数与成员c所占字节数相 等 C)程序段:data.a=5;printf(“%f\n”,data.c);输出结果 为5.000000 D)data占用4个字节的内存单元
25


相关文章:
结构体问题
五、结构体问题 11.3 19.1 56.1 57.3 例题讲解: 11.3 20.3 58.1 24.1 59.1 26.3 60.1 27.1 61.1 27.3 76.1 35.1 77.3 55.1 55.3...
C语言结构体的操作
C语言结构体的操作_计算机软件及应用_IT/计算机_专业资料。实验报告课程:C 语言程序设计 指导教师:庄志宏 实验课题:结构体的操作 实验地点:实训楼 205 实验目的:...
C语言结构体变量与链表知识总结
结构体变量存储分配示意图 11.3 结构体类型数组 11.3.1 结构体数组的定义与使用 结构体是一种新的数据类型,同样可以有结构体数组。 1、结构体数组的定义 结构...
C语言结构体数组介绍
C语言结构体数组介绍_计算机软件及应用_IT/计算机_专业资料。C语言结构体数组介绍C 语言结构体数组介绍数组的元素也可以是结构类型的。因此可以构成结构型数组。结构...
定义多个结构体
定义多个结构体_数学_自然科学_专业资料。定义多个结构体 #include<stdio.h> #include<malloc.h> struct Weather{ int temp; int day; int outdoor; struct ...
C语言结构体日期计算
C语言结构体日期计算_计算机软件及应用_IT/计算机_专业资料。C语言结构体日期,计算C 语言结构体日期计算 #include<stdio.h> typedef struct date{ int year; int...
结构体
结构体数组的定义 ※ 结构体数组的初始化 ※ 结构体数组的应用举例 ※ 结构体数组的定义 一、含义:若干个相同的结构体类型变量组成的数据集合。 二、定义...
C语言中的结构体
C语言中的结构体_计算机软件及应用_IT/计算机_专业资料。结构体如何定义全局结构和局部结构// C语言中关于结构的定义 // 将较分散的类型进行整合,使之更加完整,...
C语言中结构体的使用
C语言中结构体的使用_计算机软件及应用_IT/计算机_专业资料。脚踏实地,心无旁骛,珍惜分分秒秒。紧跟老师,夯实基础。 什么是结构体? 简单的来说 结构体就是一...
Stm32里经常出现的结构体
Stm32里经常出现的结构体_计算机软件及应用_IT/计算机_专业资料。Stm32 头文件里的结构体 分析Stm32 里经常出现的结构体在 c 语言中结构体有如下 Struct typenam...
更多相关标签: