原题在此,按照一般思路sizeof获取某个数据类型所占用空间的字节数,struct结构体计算要遵循字节对齐原则。
转载:https://www.runoob.com/w3cnote/struct-size.html
int整型一般情况默认占4字节,所以需要放在4的整数倍地址(4,8,12······),char型占1字节,char a[3]只有3字节,所以需要补一位让int b[2]的首地址放在4上。所以sizeof(struct b)字节数为1
3+1+4
2=12,然后sizeof(12)=4(12是整型)。
本来皆大欢喜,但是我用的vs2010 express是安装在虚拟机中,一般情况都是用在线代码运行看结果。一般是用下面这个网站。
https://www.dooccn.com/c/
但是同样的代码却是不一样的结果。
后面又换了菜鸟工具
https://c.runoob.com/compile/11/
和c语言网的在线环境运行
https://www.dotcpp.com/run/
三个在线网站输出结果都是12 8,令我百思不得其解,后续想到可能是编译器不同导致结果不同,找了一个可以换编译器版本的网站。
https://code.y444.cn/gcc
发现在gcc32的编译器环境下结果是12 4,gcc64的编译器环境下结果是12 8
且需要把”%d”改成”%ld”,即输出长整型数。
最后,这篇文章很详细的阐述了32位和64位编译器环境下sizeof返回的值
https://blog.csdn.net/xunfeng13/article/details/51011509