读书人

构造体的大小求解

发布时间: 2012-08-03 00:12:14 作者: rapoo

结构体的大小求解
struct
{char T:4;
char K:4;
unsigned short i:8;
unsigned long m;
}
求sizeof(A)
(1)考虑位对其的值
(2)不考虑位对其的值
虚心求教,最好有详细解说 谢谢了

[解决办法]
使用:
#pragma pack( [ n] )
改变n的值,直接输出sizeof(A)不就可以看到么?自己动手试试,再去理解吧。。

[解决办法]
32位系统下,不对齐7,对齐8
相当于:
struct
{
char TandK;
unsigned short i;
unsigned long m;
}


[解决办法]
32位操作系统:
1、需要单字节对齐时如下
struct A
{char T:4;
char K:4;
/*上面的两个char总共占8位也就是一个字节*/
unsigned short i:8;//这个还是2字节
unsigned long m;//这个是4字节
};
所以siziof(A)=7

2、需要4字节对齐时如下
struct A
{char T:4;
char K:4;
unsigned short i:8;
/*上面3个总共占4字节*/
unsigned long m;//这个4字节
};
所以sizeof(A)=8

64位的操作系统只是sizeof(unsigned long)=8,上面所得结果分别再+4就是最终计算结果

[解决办法]
struct
{char T:4;
char K:4;
unsigned short i:8;
unsigned long m;
}

32位平台,4字节对齐:
1+(1)+2+4=8

读书人网 >C语言

热点推荐