结构体嵌套、大小及位域

1.语法

struct 结构体名

{

        struct 结构体名 成员名;

};

2.结构体大小

例如:

#include <stdio.h>

struct A
{
    char a;
    int  b;
    char c;
    char d;
}; 

int main()
{
    printf("%d\n",sizeof(struct A));
    return 0;
}

打印出的结果 : 12

3.字节对齐:

字节对齐主要是针对结构体而言的,通常编译器会自动对其成员变量进行对齐,以提高数据存取的效率;

4.结构体大小的计算方法

自身对齐:看自身的数据类型是多大

默认对齐:看当前环境的位数,通常是4或8

有效对齐:1  2  4  8....和自身对齐一样

存储地址存储地址必须整除有效对齐

从上面的例子来看:

                自身对齐  默认对齐  有效对齐  存储地址

char a           1              4                1             0

int b              4              4                4             4(占了 4,5,6,7)

char c           1             4               1            8

char d          1           4                1              9 (因为8,9只占2个位置,和4个位置(int)相差2个位置,所以需要补2个位置,也就是补10,11,所以最后大小位为12) 

5.位域

5.1定义:所谓的“位域”是把一个字节中的二进制位分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。

一般形式:

struct 位域结构体名

{

        位域列表;

};

位域列表的形式:类型说明符 位域名:位域长度

 5.2位域变量说明

1.struct位域结构体名 变量名

2.struct位域结构体名 变量名= {成员1值,成员2值..}

3.定义位域结构体时顺便创建变量

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值