struct(结构体)
作用:将多种数据组合起来成为一个整体使用,满足信息流传递使用;可根据需求量身定制;每个成员可同时利用;
尤其要注意声明时花括号右侧的分号;
定义有两种形式:一种是在声明后面直接加上该类型的变量名,第二种是利用结构体单独定义变量;
结构体名是结构体类型的标志,花括号内部是结构体的各个成员,每个成员都要进行类型声明,成员也可以是另外一个已经定义的结构体类型变量;
结构体定义是只是描述结构的组织形式,不分配内存,只有利用结构体类型定义变量时才分配内存;
“.”是成员运算符,在所有运算符中优先级最高,无法对结构体整体进行操作,只可以对其成员进行操作;示例:
struct student
{ int num; //每个成员都要有类型声明,和一般变量定义一样;
char name[20];
float score;
}; //注意该‘;’不可以省略;
struct student stu,*p;
p=&stu; //p中存放着结构体变量stu在内存中的首地址;
//注意不能用指向结构体变量的指针指向该结构体变量的某个成员:p=&stu.num;是错误的;
访问结构体成员变量的三种方法:
①stu.num、stu.name、stu.score
②(*P).num、(*p).name、(*p).score //括号不能省略
③p->num、p->name、p->score
注意以下几种运算:注意p->num是一个整体,->运算符优先级高于++
p->num //得到p指向结构体变量成员num的值
p->num++ //得到p指向结构体变量成员num的值,用完后该值加1
++p->num //使得p指向结构体变量成员num的值加1;
结构体变量内部成员的赋值必须在结构体变量的花括号里面,且每个成员之间用逗号分开;
结构体变量内存空间分配(为了减少内存空洞):原则一是不足int型的变量统一按照int型变量的大小(4字节)计算,大于4字节的数据类型按其本身大小计算(字对齐);原则二是后一个变量若能够在前一个成员变量分配的空间剩余空间里存放下,则后面一个成员变量不在重新分配空间;原则三是若成员最大的short int类型,则统一按照short int类型的大小(2字节)计算大小(半对齐),同样若后面的可以利用前面一个成员剩余的空间,则不在额外重新分配;一般的做法是将同种类型的成员放到一起,紧紧挨着;示例:
struct node
{char ch; //4
int num; //4
char ch1; //4
char ch2 //0,利用上一个剩余的,不在额外分配
}; //该结构体变量占12个字节
union(共用体)
作用:当多种类型、多个对象只取一时(n选1),我们也可以使用联合体发挥其长处,就是几个不同的变量共占同一段内存空间;
可以利用共用体验证大小端(第一个成员是short型,第二个是char型);
![](https://img-blog.csdnimg.cn/img_convert/822a23cab9e67f4ea77c7fe43a8c00a4.png)
Big_endian 大端字节序: 数据的高字节位存储在低地址对应的存储单元;
Little_endian 小端字节序:数据的低字节位存放在低地址对应的存储单元。
共用体存储:是内部选择项最大的一个,总数是4的整数倍;
enum(枚举)
作用:经常作为Switch的标签;
typedef
作用:为一种数据类型定义一个新名字,简洁地使用,大量的应用在嵌入式系统移植中;示例:
typedef unsigned long unit32; //将无符号长整型变个名称为unit32;