您的位置:首页 > 其它

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

2015-04-16 12:40 423 查看
(1)、结构体
基本类型       int、double、char、float、short、long等等
复合类型       数组、结构体
指针类型
空类型
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



4)结构体初始化



5)结构体赋值
先定义结构体变量,然后用变量.结构体子成员名称
 
6)指针与结构体





7)字节对齐的概念
变量在内存里排放时有对齐的概念,所谓某个变量是N字节对齐的,就是说该变量的“内存起始地址值”%N = 0;
 
a、基本类型自身对齐值
基本类型:char 1   short 2   (32bitmachine——int float long   4    double  8)
结构体类型:成员中基本类型的自身对齐值最大的那个值。
b、指定对齐值
使用#pragma pack(N)或__attribute__((aligned(N)))在定义结构体时指定对齐值N。但Gcc对32位机缺省情况下指定对齐值为4。
c、有效对齐值
最终决定数据存放地址方式的值,取值对象为自身对齐值和指定对齐值中较小的那个值。
srtuct s {
            char    c;        //1
            int       i;        //4    按4对齐
};
那么sizeof(struct s) = 8;



 
(2)、共用体(联合体)union
各成员在内存中共用一块空间,与结构体在内存中使用空间情况相反。
程序运行时无时不刻在访问内存,深刻理解内存管理机制有利于更好地学习C
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息