(四)、结构体变量的初始化
1.回忆一下普通变量的初始化
2.结构体变量的整体初始化(顺序要一致)
关于结构体变量的初始化与初始化数组类似;
也是使用花括号括起来,用逗号分隔的初始化好项目列表,
注意每个初始化项目必须要和要初始化的结构体成员类型想匹配,
注意如果在定义结构体变量的时候没有初始化,那么后面就不能全部一起初始化了;
意思就是;
/这样是可以的,在定义变量的时候就初始化了; struct book s1={//对结构体初始化 "guojiajiaoyun",//author为字符数组 "yuwen",//title为字符串 22.5 }; /这种就不行了,在定义变量之后,若再要对变量的成员赋值,那么只能单个赋值了; struct book s1; s1={ "guojiajiaoyun",//author为字符数组 "yuwen",//title为字符串 22.5 };//这样就是不行的,只能在定义的时候初始化才能全部赋值,之后就不能再全体赋值了,只能单个赋值; 只能; s1.title = "yuwen";........//单个赋值;
3.结构体的个别初始化(可乱序)
(五)、访问结构体成员变量
5.1什么是结构体成员变量
结构体就像一个超级数组,在这个超级数组内,一个元素可以是char类型,下个元素就可以是flaot类型,再下个还可以是int数组型,这些都是存在的。
第一种:用结构成员运算符点(.)
结构体变量名.成员名;
注意,点其结合性是自左至右的,它在所有的运算符中优先级是最高的;
5.2结构体内嵌结构体怎么访问
结构体变量名.成员.子成员………最低一级子成员;
struct date { int year; int month; int day; }; struct student { char name[10]; struct date birthday; }student1;
若想引用student的出生年月日,可表示为;student.brithday.year;
brithday是student的成员;year是brithday的成员;
5.3结构体变量可以整体赋值但必须分开输入输出
1.可以整体赋值:
可以将一个结构体变量作为一个整体赋值给另一相同类型的结构体变量,可以到达整体赋值的效果;这个成员变量的值都将全部整体赋值给另外一个变量;
2.必须分开输出:
可以将一个结构体变量作为一个整体赋值给另一相同类型的结构体变量,可以到达整体赋值的效果;这个成员变量的值都将全部整体赋值给另外一个变量;
总结;除了“相同类型的结构体变量可以相互整体赋值”外,其他情况下,不能整体引用,只能对各个成员分别引用;
(六)、结构体数组:
1.为什么要用结构体数组呢/
在上面的book类型的结构体 ,每本书就需要用一个book类型的结构体变量来描述,若是要描述两本书,需要使用两个这样的变量,依次类推;因此要使用一个该结构体的数组,来表示这些图书;并且数组就是存储一组具有相同类型的数据,因此就有了结构体数组的出现.
2.声明结构体数组
与普通的数组声明一样,int a[10];int为元素的数据类型,a为数组名 【10】表示申请了10的int单元的内存;
再看结构体声明;struct book library[10];是不是类似,struct book为数组元素的数据类型,library为数组名,[10]为申请了10个struct book单元的内存;
解释;声明library为一个具体10个元素的数组,并且每个元素都book类型的结构,因此可以得到library[0],library[1]…….都是单独独立的一个book结构;
注意library本身不是结构体名而是一个数组名;
3.结构体数组的初始化
4.访问结构体数组的成员:
规则;在结构体名后加点运算符,然后再是成员名;
library[5].title;//表示第5个元素的title成员;library[5]是结构体变量名,title就是成员名;
library[5].titlt[4];//注意title是数组类型,第5个数组元素的title成员的第4个字符;
总结;
library //book结构体的数组 library[2]//数组的第二个元素,一个book结构体类型的变量名; library[2].title;//char数组,结构体数组的第二个元素的title成员; library[2].title[4];//表示一个字符,结构体数组的第二个元素的 title成员的第四个字符;
(七)、指向结构体的指针
1.使用结构体指针的好处:
就像指向数组的指针一样,它比数组本身更容易操作,指向结构体的指针通常也比结构体本身更容易操作;
2.声明和初始化结构体的指针
声明struct book * him;
规则就是,struct 结构体名+ * + 指针名;
这个声明不是建立一个新的结构体,而是创建了一个指针类型的him指针变量,他可以指向任何现有的book类型的结构体;
him = &library[0];
怎么访问成员?
方法一:
引入一个运算符,-> 后跟->运算符的结构体指针和后跟.点运算符的结构体名是一样操作的;
注意一点的是;不能使用him.成圆;因为him不是结构体名;
方法二;
如果him=&library[0],那么him=library[0];因为&和是一个互逆的运算符; &取地址,*取值;
=》library[0].value 等价于 (*him).value;注意必须使用圆括号,优先级问题; 然后都与him.value是一个作用;
如有问题可直接私聊博主!!!!!