结构体
1.结构体的概念
描述一些 用基本类型不太好描述的复杂类型
2.语法
struct 结构体类型名
{
成员变量
};
//定义了一个 数据类型------自己造出来的
3.结构体类型定义的形式:
1.先定义类型,后定义变量
struct student
{
...
};
struct student s;
2.定义类型的同时,定义变量
struct student
{
...
}s;
3.定义类型的同时,定义变量 ,类型名可以省略 --- 如果该类型,只使用一次
struct
{
...
}s;
4.数据类型:
定义变量
定义数组
定义指针
做函数形参
5.结构体的大小:
结构体的对齐问题(内存对齐)
结构体的对齐规则:(在32位平台上)
1.在32位的平台上,默认都是按4字节对齐的 //64位默认8字节
2.对于成员变量,各自在自己的自然边界上对齐
3.如果 成员变量中有比四字节大,此时,整个结构体按照4字节对齐 //64位超过4字节,以8字节对齐
4.如果 成员变量中没有比4字节大, 此时,整个结构体按照最大的那个成员对齐。
32位 尽可能读32位,四个字节
28个字节
共用体
union
共用体作用:
1.节省空间 嵌入式开发环境 (资源有限)
a.运行空间 ----内存条
b.存储的空间----硬盘
2.实现数据的转换
语法:
union 共用体类型名
{
成员变量名;
}; //定义了一个共用体类型
注意:
1.共用体初始化时,只能给一个值,默认给到第一个元素
2.各个成员起始位置相同
取决于最后一次给到的值,以及最后一次能影响到的字节数
判断电脑大小端
#include<stdio.h>
union demo
{
int b;
char a;
}d = {1};
int isLittle(void)
{
return d.a;
}
int main(void)
{
printf("%d\n",isLittle());
return 0;
}
枚举
enum
用途:
提高代码的可读性
使用:
将一些相关的常量集合在一起,成为一个枚举类型
语法:
enum 枚举类型名
{
枚举常量名1, //如果不给定值,从0开始递增
枚举常量名2,
.....
};
枚举优点
1.提高代码的可读性
2.有了类型,语法检查更严格
注意:枚举类型 本质上 是通过int 类型实现的
typedef关键字
作用:不是定义类型,而是 给已有类型起别名
可以给任意类型起别名
位运算
对二进制位上的数据进行运算
运算:
1.& -------按位与运算 ----运算规则 一假则假
2.| --------按位或运算 ----------------一真则真
3.~ --------按位取反 ----------------真假相对
4.^ 异或 相同为0 不同为1
5.<< 左移
6.>> 右移
用途:
1.控制某些二进制位
控制硬件 编程 --相关寄存器中对应的位---01变化----影响到对应的引脚上高低电平的变化
操作硬件:
左移
操作数1<<操作数2
将操作数1 左移 操作数2 这么多位
清零 & 运算
置一 | 运算
右移
操作数1 >> 操作数2
逻辑右移
操作数1 ---- 是一个无符号数 - -----高位补 0
算数右移
操作数1 ------------有符号数 ----------高位补符号位