结构体和共用体 2 梁春燕 华电信息管理教研室.

Slides:



Advertisements
Similar presentations
现代电子技术实验 ——综合实验之单片机部分
Advertisements

說 劍 《莊子‧雜篇》─ 第 一 組 賴泊錞 謝孟儒 張維真 羅苡芸
基本概論 Basic concepts.
勇闖「卡勒居」 學長姐經驗分享(文組).
高三學長姐繁星及個人申請上榜 經驗分享(理組)
电子成绩单项目实现.
第10章 结构体与链表 本章要点: 结构体类型与结构体变量的定义 结构体变量的引用与初始化 结构体数组 链表处理 共用体类型和枚举类型
第三章 鏈結串列 Linked List.
计算机硕士专业基础—C语言 赵海英
新世代計算機概論 第14章 程式語言.
趙靖宇時間-專治你的Monday blue
数据结构与算法 数据结构与算法实验
公務人員優惠存款制度再改善的 重點介紹 銓敘部退撫司
第九章 系 统 安 全 性 9.1 结构体 9.2 结构体型数组  9.3 结构体型指针 9.4 内存的动态分配 9.5 共用体
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
Linked List Operations
第7章 结构体、联合体和枚举类型 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)
C语言程序设计 第十二章 位运算.
C程序设计 第9章 自定义数据类型 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
程式設計 博碩文化出版發行.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
内容提要 对象的生命周期 构造函数 析构函数 拷贝构造函数. 常宝宝 北京大学计算机科学与技术系
.NET 程式設計入門(使用 C#) 講師:鄧智鴻.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
编译原理与技术 类型检查 2018/11/21 《编译原理与技术》-类型检查.
目录 10.1 指针的基本概念 10.2 指向变量的指针变量 10.3 指向数组的指针变量 10.4 指向函数的指针变量和指针型函数
第5章 语义分析(Semantic Analysis)
第9章 自訂資料型態 – 結構 9-1 結構資料型態 9-2 結構陣列 9-3 指標與結構 9-4 動態記憶體配置 9-5 聯合資料型態
STRUCTURE 授課:ANT 日期:2010/5/12.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
C语言程序设计 李祥.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
第十三章 其他的C語言課題.
第五章 指针 5.1 指针的概念和定义 5.2 指针运算 5.3 指针和数组 5.4 字符串指针 5.5 指针数组 5.6 指向指针的指针
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第三章 数据类型、运算符与表达式.
2.1 C语言的数据类型 2.2 常量与变量 2.3 变量赋初值 2.4 各类数值型数据间的混合运算 2.5 C语言的运算符和表达式
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
C语言程序设计.
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
OOP6 結構Struct 黃兆武.
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
第十章 结构体与链表 西安工程大学.
第1讲 C语言基础 要求: (1) C程序的组成 (2) C语言的标识符是如何定义的。 (3) C语言有哪些基本数据类型?各种基本数
Java變數 2014/6/24.
2011 邀请中国姐妹学校韩国语研修团项目 申请时间: ~5月 27日 / 项目地点: 汉阳大学 安山校区 / 项目时间: (星期日) ~ 7.22(星期五) 费用: 100万元(韩币/人 (包含项目 - 学费, 教材费, 宿舍费, 接机费用及所有文化体验活动项目费用)
C语言复习3----指针.
第 二 章 数据类型、运算符与表达式.
保留字與識別字.
第八章 指標 (Pointer).
第三章 数据抽象.
第十章 指针 指针是C语言的重要概念,是C语言的特色,是C语言的精华。 10.1 地址和指针的概念 内存中的每一个字节都有一个地址。
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
大綱:整數的加法 整數的減法 蘇奕君 台灣數位學習科技股份有限公司
第二章 基本数据类型 ——数据的表示.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
第十二章 位运算.
Thanksgiving Day 4-1.
目录 12.1 位运算符 12.2 位域(位段) 1.
第18讲 从C到C++ 计算机与通信工程学院.
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
第9章 C++程序设计初步 9.1 C++的特点 9.2 最简单的C++程序 9.3 C++的输入输出 9.4 函数的重载
第六章 复合数据类型 指针的声明与使用 数组的声明与使用 指针与数组的相互引用 字符串及相关库函数 new与delete
安排座位.
Presentation transcript:

结构体和共用体 2 梁春燕 华电信息管理教研室

主要内容 链表 共用体 枚举类型 类型定义 小结

链表

链表 动态存储分配 使用结构体和指针操作链表

动态存储分配 C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。

分配内存空间函数malloc 功能:在内存的动态存储区中分配一块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。 原型声明: void *malloc(int size) “size”是一个无符号数

malloc函数例: char *pc; pc=(char *)malloc(100); (类型说明符*)表示把返回值强制转换为该类型指针。

分配内存空间函数 calloc 功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。 原型声明: void * calloc(int n, int size) (类型说明符*)用于强制类型转换。 calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。

calloc举例: struct stu *ps; ps=(struet stu*)calloc(2,sizeof(struct stu)); 其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。

释放内存空间函数free 声明形式: free(void*ptr); 功能:释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。

例:分配一块区域,输入一个学生数据 main() { struct stu{ int num; char *name; char sex; float score; } *ps; ps=(struct stu*)malloc(sizeof(struct stu)); (*ps).num=102; ps->name="Zhang ping"; ps->sex='M'; ps->score=62.5; printf("Number=%d\nName=%s\n",ps->num,ps->name); printf("Sex=%c\nScore=%f\n",ps->sex,ps->score); free(ps); }

使用结构体和指针操作链表 链表 链表的生成 链表的操作 一种重要的数据结构; 动态地进行存储分配的结构。 动态存储分配 结构体 -- 结点 指针– 链接结点的地址 链表的操作 链表的建立、输出、删除、插入等。

共用体

共用体 构造数据类型,也叫联合体 用途:使几个不同类型的变量共占一段内存(相互覆盖) 共用体类型定义 union 共用体名 { 定义形式: union 共用体名 { 类型标识符 成员名; ……………. }; 例 union data { int i; char ch; float f; }; f ch i 类型定义不分配内存

共用体变量的定义 形式一: union data { int i; char ch; float f; }a,b; 形式二: }; union data a,b,c,*p,d[3]; 形式三: union { int i; char ch; float f; }a,b,c; f ch i a b 共用体变量任何时刻 只有一个成员存在 共用体变量定义分配内存, 长度=最长成员所占字节数

p->i p->ch p->f 共用体变量引用 引用方式: 共用体指针名->成员名 共用体变量名.成员名 (*共用体指针名).成员名 引用规则 不能引用共用体变量,只能引用其成员 union data { int i; char ch; float f; }; union data a,b,c,*p,d[3]; a.i a.ch a.f p->i p->ch p->f (*p).i (*p).ch (*p).f d[0].i d[0].ch d[0].f 共用体变量中起作用的成员是最后一次存放的成员 不能在定义共用体变量时初始化 例 union { int i; char ch; float f; }a; a=1; () 例 a.i=1; a.ch=‘a’; a.f=1.5; printf(“%d”,a.i); (编译通过,运行结果不对) 可以用一个共用体变量为另一个变量赋值 例 union { int i; char ch; float f; }a={1,’a’,1.5}; () 例 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; ()

例 将一个整数按字节输出 main() { union int_char { int i; char ch[2]; }x; 例 将一个整数按字节输出 main() { union int_char { int i; char ch[2]; }x; x.i=24897; printf("i=%o\n",x.i); printf("ch0=%o,ch1=%o\n ch0=%c,ch1=%c\n", x.ch[0],x.ch[1],x.ch[0],x.ch[1]); } 01100001 01000001 低字节 高字节 01000001 01100001 ch[0] ch[1] 运行结果: i=60501 ch0=101,ch1=141 ch0=A,ch1=a

结构体与共用体 区别: 存储方式不同 联系: 两者可相互嵌套 struct node { char ch[2]; ch int k; a union node }b; a ch k b 变量的各成员同时存在 任一时刻只有一个成员存在

枚举类型

枚举类型 枚举类型:变量只有几种可能的值。 枚举类型定义 enum 枚举类型名{枚举元素列表}; 定义形式: enum 枚举类型名{枚举元素列表}; 例 enum weekday{sun, mon, tue, wed, thu, fri, sat}; 变量定义形式: 例 enum weekday{sun, mon, tue, wed, thu, fri, sat}workday, weekend; 例 enum weekday{sun, mon, tue, wed, thu, fri, sat}; enum weekday workday, weekend; 枚举元素,又称枚举常量,是用户定义的标识符; 枚举元素是有值的,缺省以0开始,也可以指定; 枚举变量的值只能是定义的枚举元素; 枚举值可作判断比较。

类型定义

用typedef定义类型 功能:用自定义名字为已有数据类型命名 类型定义简单形式: typedef type name; 例 typedef int INTEGER; 例 INTEGER a,b,c; REAL f1,f2; 类型定义语句关键字 已有数据类型名 用户定义的类型名 例 typedef float REAL; int a,b,c; float f1,f2; 类型定义后,与已有类型一样使用 说明: 1.typedef 没有创造新数据类型 2.typedef 是定义类型,不能定义变量 3.typedef 与 define 不同 define typedef 预编译时处理 编译时处理 简单字符置换 为已有类型命名

typedef定义类型步骤 类型定义可嵌套 例 定义结构体类型 struct date { int month; int day; 按定义变量方法先写出定义体 如 int i; 将变量名换成新类型名 如 int INTEGER; 最前面加typedef 如 typedef int INTEGER; 用新类型名定义变量 如 INTEGER i,j; 类型定义可嵌套 例 定义结构体类型 struct date { int month; int day; int year; }d; 例 定义函数指针类型 int (*p)(); int (*POWER)(); typedef int (*POWER)(); POWER p1,p2; 例 定义结构体类型 struct date { int month; int day; int year; }DATE; 例 定义数组类型 int a[100]; int ARRAY[100]; typedef int ARRAY[100]; ARRAY a,b,c; 例 定义指针类型 char *str; char *STRING; typedef char *STRING; STRING p,s[10]; 例 定义结构体类型 typedef struct date { int month; int day; int year; }DATE; 例 定义结构体类型 DATE birthday, *p; 例 typedef struct club { char name[20]; int size; int year; }GROUP; typedef GROUP *PG; PG pclub; GROUP为结构体类型 PG为指向GROUP的指针类型  struct date { int month; int day; int year; }birthday, *p;  int (*p1)(),(*p2)();  int a[100],b[100],c[100];  char *p; char *s[10];  GROUP *pclub;  struct club *pclub;

小结

小结 动态存储分配; 使用结构体和指针操作链表; 共用体变量的定义和引用:union 枚举类型的定义和使用:enum 用 typedef 定义类型的方法。

END