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

一、结构体知识点:

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

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

3、表示方法:

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

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

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

4、结构体变量的引用。

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

结构体变量名.成员名

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

5、结构体数组。

P287 例题11.2。

11.2题目
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 {

int num;

float score;

struct student *next;

};

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

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

2、简单链表。

P295 例题11.7。

完成上面的链表
11.7题目
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函数无返回值。

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

4、建立动态链表。

建立链表
对建立链表解释

5、输出链表。

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

输出链表

6、对链表的删除操作。

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

删除链表

7、对链表的插入操作。

插入链表

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

main函数

三、共用体知识点。

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

union 共用体名{

成员表列

}变量表列;

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

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

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

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

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

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

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

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

3、P311 例题11.12。

11.12题目
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。

11.13题目
11.13答案

五、用typedef命名已有类型。

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

例如:typedef int INTEGER;

int a; <==> INTEGER a;

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

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

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

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

step4.然后可以用新类型名去定义变量。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容

  • 结构体是什么? 结构体和数组一样属于构造类型 数组是用于保存一组相同类型数据的,而结构体是用于保存一组不同类型的数...
    低头看云阅读 477评论 0 1
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,741评论 2 9
  • //联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄 objc_class结构体 一、类在OC中是obj...
    石虎132阅读 2,181评论 0 21
  • 什么是结构体 结构体和数组一样属于构造类型 数组是用于保存一组相同类型数据的, 而结构体是用于保存一组不同类型数组...
    极客江南阅读 883评论 2 7
  • 情不知所起,一往情深…… 谁能说得情,一段感情怎样升起?是因为一个人吗?还是因为我们能生出一段情,才能遇见一个人呢...
    Aerad阅读 793评论 0 3