一月二十七日记录。
先前所介绍的都是基本类型,如int,还有构造类型,如数组。
但是在某些情况下,基本类型不能满足我们的需求。此时,我们可以将一些有关的变量组织起来,并定义成一个结构,以此来表示一个有机的整体或一种新的类型。然后程序就可以像处理内部的基本数据那样,对结构进行操作。
结构体类型的概念与声明
结构体是一种构造类型,它是由若干成员组成的。这些成员可以是一个基本数据类型,如char,也可以是一个构造类型,如数组。
正如结构体的类型一样,在使用它之前我们需要对其进行构造,这个操作称为声明一个结构体。
关键字struct表示声明结构,其后的结构体名代表该结构的类型名,大括号中的变量构成结构的成员。
结构体变量的定义
关键字struct构造了一个新的类型结构,然后我们要使用这个结构,这时候就要定义变量。
定义结构体变量的方式有三种:
需要注意的是:
1、结构体的类型与变量是两个概念。变量可以赋值,类型不行。如:可以用int类型定义一个a变量,然后对a赋值,但是不可以对int赋值。在编译时,对类型不分配内存空间,只对变量分配内存空间。
2、结构体成员也可以是结构体类型的变量。(嵌套)
3、使用第一个方式定义变量时,定义时的struct可省略不写。
上述代码先声明了一个Project和Project_v的结构体类型,并定义了一个结构体变量Final。然后在第二个结构体类型中有一个成员是第一个结构体类型。
结构体变量的引用
当我们定义一个结构体变量后,就可以对其进行引用。但我们不能针对一个结构体的整体进行操作,而应该是针对其成员进行操作。
引用的时候我们使用了结构体变量名后加上一个成员运算符“ . ”和成员名字,然后就能对该结构体中的该成员进行操作。
如果结构体的成员也属于一个结构体类型,在引用时就要使用若干个成员运算符,一级一级地找到最低一级的成员,并且我们只能对最低级的成员进行操作。
注意:成员运算符的优先级最高。
当我们需要使用引用地址时,结构体变量和结构体成员的地址都可以进行引用。
结构体的初始化
结构体类型与其他基本类型一样,可以在定义结构体变量时指定初始值。
这样就可以快速初始化一个结构体变量。
结构体数组
定义一个结构体数组的方式与定义结构体变量的方式相同,只是结构体变量换成数组而已。
结构体数组的初始化
类比于“结构体的初始化”。
结构体指针
一个指向变量的指针表示的是该变量所占内存的起始地址。如果一个指针指向结构体变量,那么该指针指向的就是该结构体变量的起始地址。同样,结构体指针变量也可以指向结构体数组中的元素。
在引用时需要加括号,否则会先计算点运算符后计算“ * ”,因为成员运算符优先级特别高。
指针引用结构体变量成员也可以用指向运算符"->"
综上:在引用结构体变量的成员时,我们有三种方式:
指向结构体数组的指针
使用时并无大异。
结构体作为函数参数
函数是由参数的,可以将结构体变量的值作为一个函数的参数。
使用结构体作为函数的参数有三种方式:
1、使用结构体变量作为函数参数
2、使用指向结构体变量的指针作为函数参数
3、使用结构体变量的成员作为函数参数
todo