当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 学习笔记 > 嵌入式学习笔记:c语言结构体定义和使用

嵌入式学习笔记:c语言结构体定义和使用 时间:2018-09-12      来源:未知

定义

1)结构体是一种构造数据类型

2)把不同类型的数据组合成一个整体来自定义数据类型

8.2创建结构体类型

struct 结构体类型名 {

类型 成员1名;

类型 成员2名;

...

类型 成员3名;

};

解释:

类型 : 任何学过的类型

成员x名: 标识符

注意:1.成员名和最后都有 ; 号

2.创建结构体类型本身并没有分配任何存储空间,用它定义变量的时候才分配空间

8.3创建结构体变量

8.3.1 利用已经创建的类型创建:struct 结构体类型名 结构体变量名;

例子:

8.3.2创建类型同时创建变量

struct 结构体类型名 {

类型 成员1名;

类型 成员2名;

...

类型 成员3名;

} 结构体变量名;

例子:

8.4结构体类型和变量定义形式

8.4.1一般形式

 

8.4.2匿名结构体

 

注意:这种形式一般用在结构体和联合体中会比较方便。

8.4.3 define

 

8.4.4 typedef(起别名)

 

(常用)

作用:

(1)可以避免一些人理解的错误

例:char *a,b;

(2)用在结构体上带来方便

(3)在一些很复杂的类型可以使用typedef起别名来带来方便

(4)用typedef来定义与平台无关的类型

typedef int BOOL

8.5计算结构体变量的成员

结构体变量名.成员名

(*结构体变量指针).成员名

结构体变量指针->成员名(重点)

实例:

8.6计算结构体和其变量字节数

sizeof(结构体类型名)

sizeof(结构体变量)

8.7结构体变量赋值

注意: 变量类型必须相同

补充:给数组赋值用strcpy

 

8.8结构体变量初始化

8.8.1 普通变量

例: struct student student = {"zhangsan", 1, 15, 59.9};

8.8.2 结构体数组

(1) 按结构初始化

例:struct student stu[3]={{"zhangsan", 1, 15},{"lishi", 0, 16}};

(2) 按顺序初始化

例:struct student stu[] = {"zhangsan", 1, 15, "lishi", 0, 16};

实例:

8.9变量对齐

8.9.1 变量对齐

变量地址 % min(变量字节数, 机器位数/8) = 0

8.9.2 结构体成员变量对齐

结构体成员变量地址 % min(变量字节数, 机器位数/8) = 0;

8.9.3 结构体变量对齐

结构体成员变量的最大对齐方式相同

8.9.4 结构体成员变量偏移对齐

结构体成员变量偏移 % min(变量字节数, 机器位数/8) = 0;

补充:使用伪指令#pragma pack(n):C编译器将按照n个字节对齐;

使用伪指令#pragma pack(): 取消自定义字节对齐方式。

例子:#pragma pack(2) //指定按2字节对齐

struct C

{

char b;

int a;

short c;

};

#pragma pack() //取消指定对齐,恢复缺省对齐

另外,还有如下的一种方式(GCC特有语法):

__attribute((aligned (n))): 让所作用的结构成员对齐在n字节自然边界上。如果结构体中有成员的长度大于n,则按照最大成员的长度来对齐。

__attribute__ ((packed)): 取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。

8.10 共用体(联合体)

union 共用体类型名 {

类型 成员名1;

类型 成员名2;

};

注意:共用体使用方法同结构体完全相同,唯一区别在于:

1. 共用体各个成员共用内存

2. 共用体变量的大小取决于其最大元素的大小

补充:计算机的大小端序:字节序就是变量在内存中存放的方式。

大端序:字数据的高字节存储在低地址中。

数据0x12345678

-------------------------------------------

| 地址 | 0x4000 | 0x4001 | 0x4002 | 0x4003 |

-------------------------------------------

| 内容 | 0x12 | 0x34 | 0x56 | 0x78 |

-------------------------------------------

小端序:字数据的低字节存储在低地址中。

数据0x12345678

-------------------------------------------

| 地址 | 0x4000 | 0x4001 | 0x4002 | 0x4003 |

-------------------------------------------

| 内容 | 0x78 | 0x56 | 0x34 | 0x12 |

-------------------------------------------

8.11 枚举类型

作用;给一组相关的字面常量取名, 并将它们定义为相同类型

用法:enum 枚举类型名 {

常量名1,

常量名2,

...

};

注意:1. 没有指定值时, 常量名1 值取 0, 后面每个常量的值等于前面常量的值加1

2. 可以给常量指定值,让它们从某一整数开始

上一篇:嵌入式学习笔记:C高级函数快速学

下一篇:嵌入式学习笔记; c指针详解很详细,学霸总结

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部