嵌入式软件开发培训笔记——C高级 结构体与共用体

1)、结构体

基本类型       intdoublecharfloatshortlong等等

复合类型       数组、结构体

指针类型

空类型

1)定义结构体,不会在内存内给分配空间

struct s1 {

             char    ch;

             int      i;

             float   f;

             char array[3];

};

struct s2 {           

             struct s1 s;           //嵌套定义

             char    ch;

             int      i;

             float   f;

};

2)定义结构体变量

struct    s1    varname;

 3)#define  typedef定义别名替代  struct name

嵌入式软件开发培训笔记——C高级 结构体与共用体_第1张图片

4)结构体初始化

嵌入式软件开发培训笔记——C高级 结构体与共用体_第2张图片

5)结构体赋值

先定义结构体变量,然后用变量.结构体子成员名称

 

6)指针与结构体

嵌入式软件开发培训笔记——C高级 结构体与共用体_第3张图片

嵌入式软件开发培训笔记——C高级 结构体与共用体_第4张图片

7)字节对齐的概念

变量在内存里排放时有对齐的概念,所谓某个变量是N字节对齐的,就是说该变量的“内存起始地址值”%N = 0

 

a、基本类型自身对齐值

基本类型:char 1   short 2   (32bitmachine——int float long   4    double  8)

结构体类型:成员中基本类型的自身对齐值最大的那个值。

b、指定对齐值

使用#pragma pack(N)__attribute__((aligned(N)))在定义结构体时指定对齐值N。但Gcc32位机缺省情况下指定对齐值为4

c、有效对齐值

最终决定数据存放地址方式的值,取值对象为自身对齐值和指定对齐值中较小的那个值。

srtuct s {

            char    c;        //1

            int       i;        //4    4对齐

};

那么sizeof(struct s) = 8

嵌入式软件开发培训笔记——C高级 结构体与共用体_第5张图片

 

(2)、共用体(联合体)union

各成员在内存中共用一块空间,与结构体在内存中使用空间情况相反。

程序运行时无时不刻在访问内存,深刻理解内存管理机制有利于更好地学习 C

你可能感兴趣的:(嵌入式linux环境c高级编程,c,结构体和共用体,指针)