
sizeof是可以在编译时计算的关键字. 任何类型的strlen都可以作为函数进行计算. 它只能在运行时计算,并且只能作为字符计算.
对于数组,strlen将'\ 0'判断为标志的末尾,sizeof计算数组的整个空间.
示例如下:

char buf1[]="abcde";
char buf2[30]="ABC";
printf("buf1: %d %d\n",sizeof(buf1),strlen(buf1));
printf("buf2: %d %d\n",sizeof(buf2),strlen(buf2));
打印如下:

可以看出,当我们的buf1没有指定长度时sizeof计算结构体大小,sizeof打印6sizeof计算结构体大小,因为它还包括“ \ 0”.

sizeof也可以计算类型大小. 通常,对于32位C程序,相应的long为4个字节.
如下所示:

示例:

printf("char: %d\n",sizeof(char));
printf("short: %d\n",sizeof(short));
printf("int: %d\n",sizeof(int));
printf("long: %d\n",sizeof(long));
printf("long long: %d\n",sizeof(long long));
printf("float: %d\n",sizeof(float));
printf("double: %d\n",sizeof(double));
打印如下:
sizeof计算结构大小
为了加快读取和读取结构内容的速度,计算机将字节对齐结构.

字节对齐的规则是: 结构的大小必须是最大成员的倍数(易于处理)
示例1:
struct TestA{
short a;
long b; //b=4, a=1,而5%4=1,所以会在a上面补齐3字节,所以s1=8
};
struct TestB{
char c;
TestA d;
int f; //c=1,d=8,f=4,而1+8+4=13,13%8=5,还差3字节,所以会在c上面补齐3字节, s2=16
};
int main()
{
printf("%d\n",sizeof(TestA));
printf("%d\n",sizeof(TestB));
}
打印如下:

示例2:
struct TestA {
short a;
long b; //s1=8,之前已经分析过
};
struct TestB{
char c;
TestA d;
long long f; //c=1,s1=8,f=8,由于8最大,且17%8=1,所以会在c上面补齐7字节,则s2=24
};
int main()
{
printf("%d\n",sizeof(TestA));
printf("%d\n",sizeof(TestB));
}
打印如下:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-157712-1.html
但诺列加虽是毒枭却很爱国