嵌入式软件开发培训笔记——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


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。但Gcc32位机缺省情况下指定对齐值为4

c、有效对齐值

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

srtuct s {

            char    c;        //1

            int       i;        //4    4对齐

};

那么sizeof(struct s) = 8


 

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

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

程序运行时无时不刻在访问内存,深刻理解内存管理机制有利于更好地学习 C
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值