C语言编程
结构体中的冒号(位域)
struct A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
}
sizeof(A) = 7;
- 所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。
C51的关键字
- at :变量定义存储空间绝对地址
- alien :声明与PL/M51兼容的函数
- bit :位类型
- code :存储在ROM/外部存储空间Flash,不可修改,相对来说,const是存储在RAM,只是定义不可修改,在C51中作用薄弱 (程序存储区:64KB)
- data :直接寻址的内部RAM(128B)
- idata :间接寻址的内部RAM(256B)
- xdata :外部RAM(64B)
- bdata :可位寻址的内部RAM(16B)
- pdata :分页寻址的外部RAM
- compact :使用外部分页RAM的存储模式
- interrupt :中断服务函数
- large :使用外部RAM的存储模式
- _priority_ :RTX51的任务优先级
- reentrant :可重入函数
- sbit :声明可位寻址的特殊功能位
- sfr :8位的特殊功能寄存器
- sfr16 :16位的特殊功能寄存器
- small :内部RAM的存储格式
- _task_ :实时任务函数
- using :选择工作寄存组
unsigned char code *a :RAM里的存储的指针,指向ROM里的变量 code unsigned char *a :ROM里的存储的指针,指向RAM里的变量
C特殊关键字
- volatile :易变的,可被隐性改变
- register :与Auto对应,少量的寄存器变量,读取快,但是过多的就会多余的被转成Auto存储类型
- goto :
边界对齐
K字节大小的数据必须要存储在K的整数倍的地址上
- 编译器按照结构体成员列表顺序给每个成员分配内存
- 当成员需要满足正确的边界对齐时,成员之间用额外字节填充
- 结构体的首地址必须满足结构体中边界对齐要求最为严格的数据类型所要求的首地址
4.结构体的大小为其最宽数据类型的整数倍
- 对于结构体,可能在存储字节间有空余,导致结构体整体变大
- offsetof(type,member) :获取变量member对于type首地址的偏移量
大小端
大端存储:就是把一个数的低位字节序的内容存放到高地址处,高位字节序的内容存放在低地址处。 小端存储:就是把一个数的低位字节序的内容存放到低地址处,高位字节序的内容存放在高地址处。
|