问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

第十一章-结构体与共用体(知识点)

发布网友 发布时间:2022-11-01 03:04

我来回答

1个回答

热心网友 时间:2023-10-18 04:06

1、用户自己指定一种数据结构,它称为结构体(structure)。

2、struct 结构体名 是一个类型名,与系统提供的标准类型一样,都可以用来定义变量的类型。

3、表示方法:

(1) struct 结构体名{ 成员表列 };  类型名 成员名;

(2) struct 结构体名{ 成员列表 }变量名表列;

(3) struct { 成员表列 }变量名表列;

4、结构体变量的引用。

不能将一个结构体变量作为一个整体进行输入输出,只能对结构体变量中的各个成员分别进行输入和输出。

结构体变量名.成员名

“.”是成员(分量)运算符,它在所有运算符里最高。

5、结构体数组。

P287 例题11.2。

6、指向结构体类型数据的指针。

“->”指向运算符。

以下三种情况等价:①结构体变量.类型名

②(*p).成员名

③p->成员名

1、指向结构体变量的指针。

struct student stu_1;

struct student *p;

p=&stu_1;

2、指向结构体数组元素的指针。

struct student stu[ ];

struct student *p;

p=stu;

1、链表是一种重要的数据结构。动态的进行存储分配的方式。根据需要分配内存空间。

(1)链表有一个“头指针”变量。它存放一个地址,该地址指向一个元素。

(2)链表中每一个元素称为“节点”。每个节点包括两部分:用户需要用的实际数据和下一个节点的地址。

(3)最后一个元素不指向其他元素,称为“表尾”。它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。

这种链表的数据结构,必须利用指针变量来实现,即一个节点包括一个指针变量,用来存放下一个地址。

一个指针类型的成员既可以指向其他类型的结构体数据,也可以指向自己所在的结构体类型的数据。

上面只是定义了一个struct student 类型,并未实际分配存储空间,只有定义了变量才分配内存单元。

2、简单链表。

P295 例题11.7。

3、处理动态链表所需的函数。

(1)malloc函数。

函数原型:void *malloc(unsigned int size);

作用:在内存的动态存储区中分配一个长度为size的连续空间。

返回值:是一个分配域的起始地址(类型为void)。未能成功执行则返回空指针。

(2)calloc函数。

函数原型:void *calloc(unsigned n, unsigned size);

作用:在内存的动态存储区中分配n个长度为size的连续空间。

返回值:一个指向分配域起始位置的指针。如果分配成功返回NULL。

用calloc函数可以为一维数组开辟动态存储空间,n为数组元素个数,每个元素长度为size。

(3)free函数。

函数原型:void free(void *p);

作用:释放由p指向的动态存储空间,使这部分内存区能被其他变量使用。p是最近一次调用calloc函数或malloc函数的返回值。free函数无返回值。

  P297 例题11.8  写一个函数建立一个有三名学生数据的单向动态链表。

4、建立动态链表。

5、输出链表。

首先要知道链表第一个节点的地址,也就是要知道head的值。然后设一个指针变量p,先指向第一个节点,输出p所指的节点,然后使p后移一个节点,再输出,直到链表的尾节点。

6、对链表的删除操作。

从一个动态链表中删去一个节点,并不是真正从内存中把它抹掉,而是把它从链表中分离开来,只要撤销原来的链接关系即可。

7、对链表的插入操作。

8、对链表综合运用(main函数)。

1、需求:使几种不同类型的变量存放到同一段内存单元中。

结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自己的内存单元。

共用体变量所占的内存长度等于最长的成员的长度。

2、同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是同时存放几种。

共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。

共用体变量的地址和它的各成员的地址都是同一个地址。

不能对共用体变量名赋值,也不能企图引用变量名来得到一个值,又不能在定义共用体变量时对它初始化。

不能把共用体变量作为函数参数,也不能使函数带回共用体变量,但可以使用指向共用体变量的指针。

共用体类型可以出现在结构体类型中,也可以定义共用体数组,反之也可以。

3、P311 例题11.12。

1、 声明枚举类型用enum开头。

(定义1) 例如:enum weekday{sun,mon,tue,wed,thu,fri,sat};

声明一个枚举类型 enum weekday,可以用此来定义变量。

例如:enum weekday workday,week_end;

workday和week_end被定义为枚举变量,它们的值只能是sun到sat之一。

(定义二) 例如:enum weekday{sun,mon,tue,wed,thu,fri,sat}workday,week_end;

2、说明:

(1)对枚举元素按照常量来处理,故称枚举常量。它们不是变量,不能对它们赋值。

(2)枚举元素作为常量,它们是有值的,按定义的顺序使它们的值为0,1,2......

(3)枚举值可以用来作判断比较。

(4)一个整数不能直接赋值给一个枚举变量。应先强制类型转换才能赋值。

workday=(enum weekday)2; <==> workday=tue;

P313 例题11.13。

1、typedef 声明新的类型名来代替已有的类型名。

例如:typedef int INTEGER;

int a; <==> INTEGER a;

2、声明一个新的类型名方法:

step1.先按照定义变量的方法写出定义体(如:int i;)。

step2.将变量名换成新类型名(如:将i换成COUNT)。

step3.在最前面加typedef(如:typedef int COUNT)。

step4.然后可以用新类型名去定义变量。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 使用共同体变量不可以() (A)节约存储空间(B)简化程序设计(C) 进行动态管理(D)同时访问所用成员 【实战】染发基础 理论知识+讲解配方 高中宿舍里面热水的钱到哪里去充? 怎么给热水器缴费 手镯式儿童守护追踪器,能追踪多远距离? 溧阳表白墙在哪里 3被5除 谁是被除数? 11个月宝宝可以吃花生 七个月的宝宝可以吃花生吗 宝宝几岁能吃花生 茂名市环宇实业发展有限公司怎么样? 问: 儿子当兵一个星期。班长先给我打电话让我鼓励他,我怎么感谢他班长。 新兵家长寄语简短 现在出国做试管婴儿合法吗?听说国内做的话会有很多*,真的吗? 捐卵被骗可以报警吗 qq等级代挂是什么意思? 股东出资不足应该怎么样处理 1968年10月10日出生,女,姓李,起什么名字好呢? 深圳市前海众发供应链服务有限公司怎么样? 深圳市明大世纪供应链管理有限公司怎么样? 欠钱的说4月3日之前还钱,4月3日前包括3日这一天吗 我的驾照17年4月2日前九十日内申请换新驾照,具体是几月到几月内 4月2日零点前上高速有免费吗 表示时间的时候,“公元2012年阳历4月2日”这样写可以吗? 朋友圈发动图怎么发 朋友圈发动图如何发 微信朋友圈怎么发动图? 有什么免费的查资料的APP或小程序? 这是哪家淘宝女装店的街拍? 红米手机的桌面弹窗类似于悬浮球怎么关闭? 1305kj等于多少大卡 糖醋焦酥鸭的热量是多少? 抹茶阿拉棒的热量是多少? 蒜薹腊肉的热量是多少? 虎年出生的宝宝取名注意什么 2022属虎女孩最吉利的名字 小女生晚安温馨祝福语 达利园低糖芝麻酥的热量是多少? 梳子夹干肉的热量是多少? 新生儿取名2022年好名字大全简单好写偏旁带土男生名子? win10启动修复怎样做好 路由器的上网密码被改动了怎么还原?