为什幺使用结构体
有的时候我们需要把不同类型的数据封装成一个整体,以便于引用。
结构就类似于类 一个类就是将方法属性封装起来 而结构简单说是将 一些变量组合在一起。
定义一个结构的一般形式
struct 结构名
{
成员列表 //必须进行类型声明
}变量名表列;
例如:
struct People { char *name; char sex int age; }people1,people2;
结构的嵌套定义:
struct Date { int year; int month; int day; }; struct Boy { int num; char *name; char sex; struct Date birthday; }boy;
结构体变量的引用:
在引用变量的时候不能将一个结构体变量作为一个整体进行输入输出(在引用的时候应该是 结构体变量名.成员名)
‘.’是成员运算符 它所在的运算符中优先级最高 所以 (结构体变量名.成员名)可以看成一个整体 不用加括号
可以引用结构体变量成员的地址也可以引用结构体变量的地址。
结构体变量的地址主要用作函数参数,传递结构体变量的地址。
同一个结构体中的结构体变量名之间可以直接进行整体赋值。
结构体数组:
每一数值的元素都是一个结构体变量
结构体数组的定义与初始化
struct student { char *name; char sex; int age; }stu[2]={ {"张三",'M',17}, {"李四",'M',18} };
指向结构体数据类型的指针:
一个结构体变量的指针就是该结构体变量所占据的内存段的起始地址,
所以我们就可以定义一个指针,用来指向一个结构体变量,此时指针变量的值就是结构体变量的起始地址。
结构指针的定义:struct 结构名 *结构指针变量名
初始化过程 结构指针变量=&结构变量 //正确
结构指针变量=&结构名 //错误
在这里我们不能混淆结构名和结构变量的理解
结构名只能表示一个结构形式,在编译时并不会分配内存空间 所以也不会有地址。
用结构指针变量进行访问的方式:
(*结构指针变量).成员名 或 结构指针变量->成员名