我们如果有个整型数据,可以定义个整型变量;如果要保存单个变量的的地址,可以定义个整型指针;如果有多个整型数据,可以定义个整型数组,一个数组也只能处理相同的数据类型。那如果我们要统计个人或事物的情况信息,那就会包含多种复杂不同的数据类型。
例如要把一个学生的所有情况信息放在一起,也就是把一个学生当做整体来看待。这时我们就需要一个东西把学生的各方面信息打包放在一起,这样我通过学生类型,就能定义一个学生的变量了。这样就比单个类型的变量或数组更方便处理,而这样定义一个学生的类型,就是结构体。类似于C++中的一个学生类class。
结构体,称为自定义数据类型,就是按照你自己的意愿(应用场景的需要,不同的应用场景即使是同一事物,关注的信息侧重点也不一样)来定义一个新的数据类型。
自定义数据类型有很多个,其中的一个也是最重要的就是结构体。
那么结构体怎么定义:
例如定义一个学生类型的结构体,将其的姓名和年龄信息打包在一起。一般来说按照编程命名规范,类型名的首字母要大写。
这个自定义类型和普通类型(系统自带的int double 之类)的使用是一样的,普通类型能做的事自定义都能做。
那么普通基本类型能做什么呢:主要是下面三个事情角度
那么结构体也可以做这三件事
1.通过结构体定义普通变量
结构体普通变量通过.访问其成员
上面代码结构体定义出来的变量名叫a的变量就是如图所示。
那如果想将这个年龄修改为21,要怎么弄。 这就跟数组有区别了,数组是只有一个数组名,里面具体的每个格子是没有名字的,我们通过下标来区分数组的每个格子。 但结构体里面每个小的部分是有名字的,所以我们可以直接访问a这个变量说想把你的age改为21就可以了。
那么怎么访问并修改呢:
2.通过结构体定义指针
结构体指针变量通过指向符(->)访问其成员
结构体作为参数传递一定是传指针
那么哪些类型可以用在结构体里面呢
这个错误的原因就是程序是从上往下走的编译,出了struct A才能见到struct B,意味着在这个地方这个类型才可以用,那么在A里面bb就是没有见过的。就像我们要用一个变量a,那就要先在用之前就定义好一个a(例如int a;)。结构体也一样,先定义后使用。就像要先定义赋值后才能输出一样,先输出后赋值它咋可能知道你是啥值。
所以这样就可以了
链表里数据不连续的时候我们就把它的地址保存起来,通过指针访问地址找到下一个数据。
后面在文件系统里面,例如我有3个G的数据要存储,那就要求磁盘提供一个3个G的连续块才能存下。 但要是磁盘现在只剩下5个G的碎块不连续空间了,实际上系统也会让你分开存下去,然后系统文件会自动用一个线索把它串起来。等到你要用的时候,例如是存的一个电影,现在要播放,前一段的字节内容播放完了,后一段的字节内容跟它不在一起也没关系,它有一个线索能够找到另一段的地址,然后继续播放另一段就好了。 这样的存储形式(链式结构)更加灵活。