typedef struct{
uint16_t kvo_10;
uint16_t liusu_10;
uint16_t yeliang;
uint8_t unit;
uint8_t gl_level;
uint8_t gx_level;
uint16_t JZ_dat_100;
uint8_t bc_level;
uint16_t bc_100;
uint16_t bc_per;
}SetPera;
1、结构体求大小用sizeof
涉及结构体对齐:uint16_t占两个字节,uint8_t占一个字节,按两字节对齐
2 2 2 (1+1)(1+补1) 2 (1+补1) 2 2 共18byte
算结构体字节时先看自身对齐算字节数,算了总字节数后再看是不是最大字节数的倍数。
图片源自:(188条消息) C语言--结构体内存对齐规则_c语言结构体对齐原则_->小黑的博客-CSDN博客
2、结构体整体赋值
1)两个结构体赋值 ,可直接等于,前提是里面没有指针;
SetPera aa;
SetPera bb;
bb = aa;
3、结构体拷贝到数组
(135条消息) 关于memcpy拷贝结构体、结构体数组到字符数组(字符串)的问题_Allen_Kao的博客-CSDN博客
uint8_t rebuf[64];
memcpy(rebuf,&aa,sizeof(SetPera)); //将结构体所有数据拷贝到数组;
memcpy(&bb,rebuf,sizeof(SetPera)); //将数组内容拷贝至结构体;
4、数组强制类型转换成结构体指针
typedef struct _DataEntry {
int16_t id;
uint16_t phase;
uint16_t grating;
uint16_t soa;
}DataEntry_t;
static short costable[4096];
如果结构体字节对齐方式和数组元素类型所占字节一致,则结构体按照顺序依次读取数组数据。此时结构体成员与数组元素一一对应。
5、结构体指针加一地址变了多少?是加了一个结构体的大小。
指针加一,以指针定义的数据类型为步长移动。