天天看点

C语言那些小事--sizeof补齐

sizeof定义:用于计算数据类型所占的字节数。OK,说道数据类型所占字节数,那就总结下:

char  字符型 在内存占一个字节,表示范围 0~2的7次方

int 整形 在内存占四个字节 ,表示范围-2的31次方到2的31次方

float 单精度类型浮点型 在内存占 4个字节,表示范围 7位有效数字

void 空值 在内存占0字节 ,无值

double  在内存占8个字节,绝对值范围10(-37)~10(38)

言归正传,接着说sizeof。

sizeof可以用于数据类型也可以用于变量,比如sizeof(int)就是4个字节;再比如char a;sizeof (a)是1字节。

好,下面看个程序:

#include<stdio.h>

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

void main()

{

printf("%d",sizeof(struct X));

}

答案16.为什么呢?补齐原则。有些人可能认为答案是10,如果那样的画系统会一个字节 一个字节取,效率太低了,为了提高效率char b要与int a一样,补4个字节,

后面同理。问题来了,如果是struct X{int a;char b;char c;int d;};答案就是12啦,第二个char补4个字节,自己用一个剩下3个,后面char照样可以使用前面1个字节。但后面int需要4个字节,剩余2个字节不能满足了,所以需要额外开4个字节。好了答案12出来了。还有个实验就是structX{char a; char b;char c;int d;};答案是8.从中我们可以看出,系统从前向后查看找到字节数最大的,然后从头补齐,第一个char4个字节,后面两个char享受前面剩余3个字节中的2个,后面int d字节开4个字节。

以上是个人看法,可能有些不专业,希望看到此篇文章朋友多多交流,提出宝贵的想法。

继续阅读