8.结构体与C++引用讲解

8.1上节课作业讲解

 中级阶段:

二叉树和排序都会用到递归,我们要把他的思想掌握。

 先要读取输入:

 都我们的递归公式放在第二个return。

逻辑或||

也要结束条件:

使用归纳演绎法:

 最后用result来存储但会结果

 也可以直接在result处放函数表达式。

8.2结构体——结构体对齐——结构体数组(写数据结构的时候用到结构体的概率很高。)

1.结构体的定义,初始化,结构体数组

有时候需要要将不同类型的数组组合组合成一个整体,以便于引用

例如一个学生由学号,姓名,性别,年龄,地址等属性,如果针对学生的学号姓名,年龄的等都单独定义一个变量,那么在有多名学生时,变量就难以分清。

为此,C语言提供结构体来管理不同类型的数据组合。(一个变量就可以访问这么多属性)

声明一个结构体类型的一般形式为:

结构体的关键字struct

结构体类型与整型,浮点类型,数组类型等不一样

别人并不知道你要把多少变量组合成一个结构体类型

 先声明结构体的类型,再定义变量名:

 结构体初始化

 一定要对应上,而且结构体只能一个一个地去访问。

怎么将数据通过scanf读到struct里面

再强调一遍,跟python不一样的地方,字符是单引号,字符串是双引号。

 %d等其他占位符会跳过空白符(空格,换行,制表位)

%c不会会存储空白符,所以要前面加上一个空格。

这里重新理解一下

 

 请看上面的程序,我们输入100后,咦,怎么程序中止了,马上输入结果了? 但真的是终止了吗?别忘了,标准输入流中除了100外,还有一个换行符'\n'。 第一次scanf()读取了100后, 把'\n'留在了标准输入流,第二个scanf()就从输入流中获取换行符了

下面介绍结构体数组的使用即输入和输出:
 

struct student s;      //定义结构体变量

 先构造结构体数组:

struct student sarr[3];            //定义结构体数组变量

再通过for循环读取数据,再通过for循环输出数据:

构造输入数据如下:

1001 lele M 20 821.123 SHENZHEN

2000 lili F 19 99.12 BEIJING

2012 LEILEI M 23 213.1 Shanghai

执行结果如下:

2.结构体对齐:

对于考研初试完全没有必要,考研初试只需要记住一条,结构体的大小必须是最大成员的整数倍!

下面我们通过例子来实战:
 

 size:4+20+1+4+4+30=63

但其实呢是68个字节 

WHY:
数组不算,所以最大成员是4个字节。

由于char类型原来是一个字节,所以需要增加3个字节。

30不是4的整数倍,需要加上2.

63+3+2=68

20个字节正好是4的整数倍。

那结构体为什么要按照最大成员的倍数去对齐呢?

就是为了CPU高效的去取内存上的数据。

通过地址总线通知内存,内存通过数据总线传递数据。

(32位数据总线一次传输4个字节/64位一次传输8个字节)

 浮点型分为两种:一种就是double占用8个字节,另外一种是float占用4个字节。

short和int都是整型,占用两个字节。

当其他类型(写在一起的)之和小于最大成员占用内存,可以归并为1个进行计算。

 

 

8.3结构体指针与typedef的使用

我们定义结构体变量的时候以前都是使用:

struct student s;

如果说我们不想写这么长

就可以写结构体指针

 

1.结构体指针(对考研来说非常重要)

一个结构体变量的指针(8个字节)就是该变量所占据的内存段的起始地址,可以设置一个指针变量,用它指向一个结构体的变量,此时该指针变量的值的是结构体的起始地址。指针变量也可以用来指向结构体数组的元素,从而能够通过结构体指针快速访问结构体内的每个成员

开始跟之前一样,结构体数组的初始化

 后面是主函数内定义结构体变量和结构体数组变量:

 接着定义结构体指针

 结构体指针在结构体s和结构体数组(sarr)中的练习:

在这里可以看到sizeof (s)的大小啊

 

 

2.typedef的使用(这也是考研初试中必须用的)

前面定义结构变量时使用的语句是struct student s,以这种方式来定义结构体变量,有些麻烦。

那么有没有简单一些的定义方式呢?

答案是肯定的,可以选择使用typedef声明新的类型来代替已有的类型名。

 这是我们原来定义结构体变量的方式

我们可以使用typedef起别名

 我们以前定义结构体变量的指针

struct student *p;

现在有两种方式:

 

 局部变量可以结构体中的成员变量名相同,但是不可以与结构体变量相同。

 

//在数据结构中是必用typedef的(就是让我们的node变短)

struct student *p;

p=&s; 

给int起别名。(特定的地方去使用)

8.4 C++的引用讲解

C++引用讲解(降低大家学习数据结构的难度)

C++布尔类型

1.C++的引用讲解

对于C++,首先新建源文件时,名字需要叫main.cpp,以cpp结尾,不能像我们之前那样叫main.c.

为什么王道数据结构都是用的C语言语法,但是额外用了C++的引用?

原因是很多数据结构都采用了这个做法,下面我们来看一下引用的便捷性。

 在C语言中,函数定义变量时不能定义指针变量的。

以前呢我们是使用这样取地址的方式

OR

 

有了C++的结构接口之后,可以直接引用a。

 

 什么是引用:

我在主函数中需要改变变量值的时候,在子函数中进行引用。

不需要的时候,就不需要在子函数中引用。

 

引用的底层原理与C是相同的。 

 

上面是普通变量的引用,下面是指针变量的引用。

 执行结果:

 

为什么需要使用C++引用呢:

因为如果使用C语言的话,就需要使用二级指针了。

 

 初试机试用不着

2.C++的布尔类型

 执行结果:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值