C语言结构体与链表

第 10章 CHAPTER 10 结构体与共用体 学习目标 本章主要介绍结构体的定义和使用方法,然后介绍链表的概念和相关操作,最后介绍两种新的数据类型——共用体和枚举。通过本章的学习,需要掌握结构体的概念与结构体类型的定义方法,熟练掌握结构体变量的定义、引用和初始化方法,掌握链表的概念,熟练掌握链表的相关操作,了解共用体和枚举的概念及其使用方法。 实际问题中,经常需要对一些类型不同但又相互关联的数据进行处理。比如,对一个学生而言,他的学号(num)、姓名(name)、性别(sex)、年龄(age)、成绩(score)等数据都与该学生有联系。如果将num、name、sex、age、score分别定义成相互独立的简单变量,则无法反映它们之间的内在联系;又因为这些数据彼此类型不同,而数组只能对同种类型的成批数据进行处理,所以,此时也无法使用数组。这就需要有一种新的数据类型,它能将具有内在联系的不同类型的数据组合成一个整体,在C语言里,这种数据类型就是“结构体”。 结构体属于构造数据类型,它由若干成员组成,成员的类型既可以是基本数据类型,也可以是构造数据类型,而且可以互不相同。由于不同问题需要定义的结构体中包含的成员可能互不相同,所以,C语言只提供定义结构体的一般方法,结构体中的具体成员由用户自己定义。这样,编程人员可以根据实际需要定义各种不同的结构体类型。 10.1 结 构 体 结构体遵循“先定义后使用”的原则,其定义包含两个方面,一是定义结构体类型;二是定义该结构体类型的变量。 10.1.1 结构体类型的定义 格式:struct 结构体类型名 { 类型1 成员名1; 类型2 成员名2; M 类型n 成员名n; }; 功能:定义一种结构体类型。 例如,图10.1所示结构体类型可有如下定义: num name sex birthday score year month day 图10.1 struct student结构体类型组织结构图 struct date { int year; int month; int day; }; struct student { int num; char name[20]; char sex; struct date birthday; float score; }; 【说明】① “结构体类型名”与“成员名”都遵循标识符命名规则。 ② 成员类型可以是除本身所属结构体类型外的任何已有数据类型。 ③ 在同一作用域内,结构体类型名不能与其它变量名或结构体类型名重名。 ④ 同一个结构体各成员不能重名,但允许成员名与程序中的变量名、函数名或者不同结构体类型中的成员名相同。 ⑤ 结构体类型的作用域与普通变量的作用域相同:在函数内定义,则仅在函数内部起作用;在函数外定义,则有全局作用域。 【注意】结构体类型定义的末尾必须有分号。 10.1.2 结构体变量的定义、引用和初始化 1.结构体变量的定义 (1)先定义结构体类型,再定义结构体变量。如 struct date { int year; int month; int day; }; struct date date1,date2; (2)定义结构体类型的同时定义结构体变量。如 struct student { int num; char name[20]; char sex; struct date birthday; float score; }stu1,stu2; (3)直接定义结构体变量。如 struct { int num; char name[20]; char sex; struct date birthday; float score; }stu1,stu2; 【说明】① 结构体类型与结构体变量是两个不同的概念。前者只声明结构体的组织形式,本身不占用存储空间;后者是某种结构体类型的具体实例,编译系统只有定义了结构体变量后才为其分配内存空间。 ② 结构体变量各成员存储在一片连续的内存单元中。 ③ 可以用sizeof测出某种基本类型数据或构造类型数据在内存中所占用的字节数。如pirntf(“%d“,sizeof(struct student)); 【思考】测试并分析struct student类型的结构体变量在内存所占用存储空间的长度。 2. 结构体变量的引用 (1)使用成员运算符引用结构体变量的成员。 格式:结构体变量名.成员名 功能:引用结构体变量中指定名称的成员变量。如 struct student stu1,stu2; int age; stu1.num=1001; gets(stu1.name); scanf(“%d“, age=2006-stu1.birthday.year; (2)使用指针运算符和成员运算符引用结构体变量的成员。如 struct student stu,*p= (*p).num=10001; scanf(“%s“,(*p).name); scanf(“%f“, (3)使用指向运算符“->”引用结构体变量的成员。如 struct student stu,*p= p->num=10001; scanf(“%s“, p->name); scanf(“%f“, printf(“age of %s is %d\n“,stu.name,age); (4)将结构体变量作为一个整体进行操作。如 struct student stu1,stu2,*p= stu2=stu1; printf(“the address of struct student variable stu2 is %x“, 【说明】① “(*p).成员名”、“p->成员名”与“stu.成员名”等价,不过后两种方式更直观。 ② 成员运算符“.”与指向运算符“->”的优先级相同,都高于指针运算符“*”。 【注意】不能将结构体变量当作一个整体进行输入、输出或赋值,如 struct date date1,date2; date1={1988,8,5}; scanf(“%d%d%d“, printf(“%d%d%d“,date2); 【思考】“(*p).成员名”中的圆括号能否省略? 3.结构体变量的初始化 在定义结构体变量的同时,按照所属结构体类型的组织形式依次写出全部或部分成员变量的初始值。如: struct

C语言结构体和链表结合,C语言结构体与链表相关推荐

  1. C语言结构体与指针ppt,c语言指针和结构体:链表详解.ppt

    c语言指针和结构体:链表详解.ppt 1,第十一章 链表,2,例跳马.依下图将每一步跳马之后的位置x,y放到一个"结点"里,再用"链子穿起来",形成一条链,相邻 ...

  2. c语言 增加 删除 修改的功能 不用链表,不用链表,单是结构体写入文件后,是否可以进行修改删除...

    不用链表,单是结构体写入文件后,是否可以进行修改删除 #include #include #include typedef struct Node { char  num[20]; char name ...

  3. linux中c语言结构体详解,Linux C语言结构体-学习笔记

    Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...

  4. c语言中结构体类型定义的函数指针,结构体中定义函数指针

    结构体指针变量的定义 定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量struct 结构体标识符{ 成员变量列表;-};struct 结构体标识符 *指针变量名;变量初始化:stru ...

  5. c语言结构体成员变量私有化,C语言中结构体变量私有化详解

    C语言中结构体变量私有化详解 背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚 ...

  6. c++ 结构体赋值_《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事

    一.学习目标 了解C语言的结构体的使用方法 了解C语言结构体的结构的赋值 了解多种C语言结构体变量的赋值方法和取值方法 目录 <零基础看得懂的C语言入门教程>--(二)简单带你了解流程 & ...

  7. c语言结构体共用体枚举实例程序,10-C语言结构体-共用体-枚举

    结构体是什么? 结构体和数组一样属于构造类型 数组是用于保存一组相同类型数据的,而结构体是用于保存一组不同类型的数组 定义结构体 在使用结构体之前必须先定义结构体类型,因为C语言不知道你的结构体中需要 ...

  8. c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配

    #include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...

  9. c语言结构体调用成员函数,c语言结构体函数调用参数如何设置

    c语言结构体函数调用参数怎么设置 函数结构是下面的代码,main函数中如何调用showinfo函数,参数应该怎么设置,对参数的设置不太明白 C/C++ code#include #define SIZ ...

最新文章

  1. spring: 使用Spring提供的JDBC模板(使用profiles选择数据源/使用基于JDBC驱动的数据源)...
  2. 山东省能源产业项目动态及未来投资决策建议报告2021版
  3. 博士申请 | 香港浸会大学万人杰教授招收计算机视觉全奖博士生/研究助理
  4. OpenCV几何变换的实例(附完整代码)
  5. 机器学习(八)——在线学习、K-Means算法、混合高斯模型和EM算法
  6. 前端学习(2001)vue之电商管理系统电商系统之获取商品分类数据
  7. 基于嵌入式操作系统VxWorks的多任务并发程序设计――中断与任务
  8. login控件authenticate_ASP:Login控件(登录控件)
  9. 【Kafka】Kafka如何开启SSL 控制台消费与生产 代码消费与生产
  10. php的数组操作,PHP的数组操作
  11. U盘插入苹果电脑后被分区,在Windows系统用不了怎么办。
  12. table固定表头、固定列
  13. 计算机桌面上的照片转pdf免费,电脑上怎样快速将图片转PDF
  14. 慕尼黑大学计算机语言学,慕尼黑大学,斯图加特大学和萨尔大学的计算语言学硕士如何选择?...
  15. 1. 批处理常用符号详解:
  16. 华为设备IGMP配置命令
  17. PCM和WAV数据结构
  18. Http长连接、短连接、持久连接这三个概念的分析总结
  19. Win11新电脑开机怎么跳过登录microsoft账户?
  20. 为什么都有API网关?聊聊API网关的作用

热门文章

  1. 新浪微博分享链接代码-简单前端分享
  2. Python程序——有一段英文文本,其中有单词连续重复了2次,编写程序检查重复的单词并只保留一个。
  3. Github 开源:高效好用的对象间属性拷贝工具 升讯威 Mapper:( Sheng.Mapper)
  4. 生成微信支付接口的签名工具
  5. 希捷 sshd 微型计算机,总结:希捷SSHD薄盘的优/缺点_希捷 Laptop Thin 500GB 5400转 8GB混合硬盘_内存硬盘评测-中关村在线...
  6. GPS定位及获取卫星参数实例整理
  7. QTP的键盘鼠标录制
  8. wingrub命令行启动深度linux,用GRUB(包括WINGRUB)命令行模式引导安装Linux
  9. 等额本息还款方式的年利率计算方法及java代码实现
  10. python与人工智能关系论文_《Python深度学习》笔记:人工智能、机器学习与深度学习关系...