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

结构体


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

10.1.2结构体变量的定义

10.1 结构体

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

10.2 共用体

10.1.6 结构体指针

1<

br />
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


相关文章:
C语言中结构体的使用
C语言中结构体的使用_计算机软件及应用_IT/计算机_专业资料。脚踏实地,心无旁骛,珍惜分分秒秒。紧跟老师,夯实基础。 什么是结构体? 简单的来说 结构体就是一...
结构体
结构体_数学_自然科学_专业资料。结构体C++程序设计 lab9 学号:41130091 班级:材料 1104 姓名:丁振文 实验 9 结构体 一、实验目的⑴ 掌握结构体类型的基本概念和...
C语言中的结构体
C 语言中的结构体 格式:struct 结构体标识名 {类型名 1 结构成员表 1; 类型名 2 结构成员表 2; ??类型名 n 结构成员表 n; }; 注意:struct 是关键字,...
定义多个结构体
定义多个结构体_数学_自然科学_专业资料。定义多个结构体 #include<stdio.h> #include<malloc.h> struct Weather{ int temp; int day; int outdoor; struct ...
c语言结构体用法(转载)
c语言结构体用法(转载)_IT/计算机_专业资料。有关于c语言结构体用法C 语言,结构体(struct) 用法 结构(struct) 结构是由基本数据类型构成的、 并用一个标识符来...
Stm32里经常出现的结构体
Stm32里经常出现的结构体_计算机软件及应用_IT/计算机_专业资料。Stm32 头文件里的结构体 分析Stm32 里经常出现的结构体在 c 语言中结构体有如下 Struct typenam...
c语言(结构体程序设计)
C 语言程序设计实验报告 实验七、结构体程序设计【实验目的】(1)掌握结构体类型的概念、定义和使用; (2)掌握结构体数组、结构体指针的定义和使用; 【实验内容及...
第二十讲 结构体变量
第二十讲 结构体变量 1、结构体结构体类型的定义 信息管理 一个学生的信息有学号、姓名、性别、年龄、住址、成绩等。 一本图书的信息有分类编号、书名、作者...
类和结构体的区别
通俗的理解,class 包涵 structure, class 里有方法拉,成员 拉,什么滴, 而 structure 只有数据, 二 .类与结构的差别 %%%类成员默认是 private,而结构体默认是 ...
C语言中结构体变量和结构体类型的定义
1.结构体类型定义 定义方式 1: Typedef struct LNode { int data; // 数据域 struct LNode *next; // 指针域 } *LinkList; 定义方式 2: struct LNode {...
更多相关标签:
c语言结构体 | 结构体初始化 | 结构体指针 | 结构体数组 | 结构体定义 | c++结构体 | 结构体赋值 | 中文编程 |