嵌入式Day16--构造数据类型(自定义数据类型)

嵌入式Day16--构造数据类型(自定义数据类型) 1.结构体把多个数据类型包含基本数据类型和构造数据类型组合在一起描述一个相对复杂的事物(个体)1.1定义结构体的语法先声明结构体再定义结构变量进行数据的访问声明 struct 结构体名 { 具体的属性值1; 具体的属性值2; 具体的属性值3; 具体的属性值4; 具体的属性值5; } // 此处有个分号不可以省略 // 只是声明不开辟内存空间。 struct Date { int year; int mon; int day; } struct Person { char name[50]; int age; int heigh; char phone[20]; struct Date date; };1.2定义结构体变量struct 结构体名 变量名 内存会开辟内存空间 struct Person per2; struct Person *point per21.3结构体成员的访问运算符 . 双目运算符从左到右 1级优先级 - 双目运算符从左到右 1级优先级 何时使用 . 或 - , 取决于运算符的的左操作数若左操作数是变量使用. 如果是指针的话使用- 访问成员的时候如果是通过变量访问使用. 运算符 访问成员的时候如果是通过指针访问使用-运算符 per2 是变量的情况 per2.name ; 表达式的类型是name的数据类型。当使用访问运算符访问后表达式的类型由右操作数决定 per2 是指针的情况 per2-name ; 表达式的类型是name的数据类型。当使用访问运算符访问后表达式的类型由右操作数决定1.4结构体的大小struct Person { char name[50]; // 50 int age; //4 float heigh; //4 char phone[20]; //20 // struct Date date; }; 口算的总大小 504420 78 byte printf(sizeof per is %lu\n,sizeof(struct Person )); 80byte字节对齐问题 默认 4字节对齐当结构体声明好系统会对结构体内存空间布局进行调整。目的为了提高cpu读写内存的效率。将需要存储变量的地址值和该类型的大小进行求余操作。如果余数为0则该变量储存在这个地址。如果不是地址加1后再试。找到结构体中占用空间最大的成员(基本数据类型的成员 4byte/8byte) 。最终结构体的大小是4的倍数或8的倍数。示例如下此处第二题和第三题答案位置放反了