c语言各类型所占字节数

(1)struct结构体变量大小等于结构体中的各个成员变量所占内存大小总和,union共用体变量大小等于共用体结构中占用内存最大的成员的内存大小; 联合体中占用内存空间最大的字段加上填充字节(对齐字节后所需字节数)。

(2)枚举类型,指一个被命名的整型常数的集合。即枚举类型,本质上是一组常数的集合体,只是这些常数有各自的命名。枚举类型,是一种用户自定义数据类型。

枚举变量,由枚举类型定义的变量。枚举变量的大小,即枚举类型所占内存的大小。由于枚举变量的赋值,一次只能存放枚举结构中的某个常数。所以枚举变量的大小,实质是常数所占内存空间的大小(常数为int类型,当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节),枚举类型所占内存大小也是这样。

(3)指针其实就是地址, 与它所指的基类型无关, 更与C语言无关, 只与机器有关. 如果你的机器是16位寻址的, 那指针就是16位的,2个字节, 如果是32位寻址的, 指针也是32位的,4个字节.如果寻址是64位的,指针也是64位,8个字节。

(4)

类型 16位 32 位 64位
char 1 1 1
short int 2 2 2
int 2 4 4
unsigned int 2 4 4
float 4 4 4
double 8 8 8
long 4 4 8
long long 8 8 8
unsigned long 4 4 8

首先来看字符类型,这里单指char , char变量在内存中存储的是字符对应的ASCII码值。所以长度也是固定的,不管在哪种编译器下,均为1个字节。

再来看 浮点类型,C中的浮点类型有俩种,float和double,与整数不同的是,浮点数的长度适中的固定的,float占用4个字节,double占用8个字节。

最后来看 整型类型,查阅资料后发现虽然16位、32位或者64位的机子各种类型并不一样,但有几条规则(ANSI/ ISO制定):

  • short 至少占用2个字节
  • int 建议为一个机器字长,32位环境下为4字节,64位环境下为8字节
  • short 的长度不能大于int, long 的长度不能小于int

sizeof(a)=?
解析:

首先,#pragma pack(2)   强制设定为2字节对

i   4字节

u  一个为13,一个为4,默认为4字节对齐;

     union占对齐后数据的最大字节大小,默认为13+3=4*4=16;

     但是,该处强制为2字节对齐,实际为13+1=2*7=14字节

color   枚举类型的实例  4字节

4+14+4=22字节

猜你喜欢

转载自blog.csdn.net/wanghx_try/article/details/81200379