介绍
这篇文章主要介绍“C语言中结构体结构怎么对齐”,在日常操作中,相信很多人在C语言中结构体结构怎么对齐问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“C语言中结构体结构怎么对齐”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
结构、相互关联的元素的集合,每个元素都有自己的内存空间,每个元素在内存中的存放是有先后顺序的,就是定义时候的顺序;一个结构所占的总的内存大小,并不是各个元素所占空间之和,而是存在字节对齐的问题。
结构中的每个元素相对于结构体的首地址的偏移量能被该元素的大小整除(某些编译器,如果该元素的大小比;4,则偏移量能被4整除即可)。
测试代码:
[xdb@localhost 测试],美元cat test.cpp # include & lt; cstdio> # include & lt; iostream> using namespace 性传播疾病; # define LL  long long struct E1  { ,,,int ;, char b;, char c; }e1; struct E2  { ,,,char b;, int ;, char c; }e2; struct E3  { ,,,char ;, short b;, int c;, LL d; }e3; struct E4  { ,,,int c;, LL d;, char ;, short b; }e4; struct E5  { ,,,char a1, a2, a3、a4、a5、a6; }e5; struct E6  { ,,,char a1, a2, a3; }e6; struct E7  { ,,,struct E5 elem5; ,,,struct E6 elem6; ,,,LL ; }e7; struct E8  { ,,,char [9]; }e8; struct E9  { ,,,struct E8 elem8; ,,,LL ; }e9; struct E10  { ,,,char ; }; int main (), { ,,,把(“——祝辞,E1"); ,,,cout & lt; & lt;, sizeof (E1), & lt; & lt;, endl; ,,,printf (“% x % x % x % x \ n",,, e1,,, e1.a,,, e1.b,,, e1.c),,,,, ,,,把(“——祝辞,E2"); ,,,cout & lt; & lt;, sizeof (E2), & lt; & lt;, endl; ,,,printf (“% x % x % x % x \ n",,, e2,,, e2.b,,, e2.a,,, e2.c),,,,, ,,,把(“——祝辞,E3"); ,,,cout & lt; & lt;, sizeof (E3), & lt; & lt;, endl; ,,,printf (“% x % x % x % x % x \ n",,, e3,,, e3.a,,, e3.b,,, e3.c,,, e3.d),,,,, ,,,把(“——祝辞,E4"); ,,,cout & lt; & lt;, sizeof (E4), & lt; & lt;, endl; ,,,printf (“% x % x % x % x % x \ n",,, e4,,, e4.c,,, e4.d,,, e4.a,,, e4.b),,,,, ,,,把(“——祝辞,E5"); ,,,cout & lt; & lt;, sizeof (E5), & lt; & lt;, endl; ,,,把(“——祝辞,E6"); ,,,cout & lt; & lt;, sizeof (E6), & lt; & lt;, endl; ,,,把(“——祝辞,E7"); ,,,cout & lt; & lt;, sizeof (E7), & lt; & lt;, endl; ,,,printf (“% x % x % x % x \ n",,, e7,,, e7.elem5,,, e7.elem6,,, e7.a); ,,,把(“——祝辞,E8"); ,,,cout & lt; & lt;, sizeof (E8), & lt; & lt;, endl; ,,,把(“——祝辞,E9"); ,,,cout & lt; & lt;, sizeof (E9), & lt; & lt;, endl; ,,,printf (“% x % x % x \ n",,, e9,,, e9.elem8,,, e9.a); ,,,把(“——祝辞,E10"); ,,,cout & lt; & lt;, sizeof (E10汽油),& lt; & lt;, endl; ,,,return 0; } [xdb@localhost 测试]$
编译,执行
[xdb@localhost 测试]美元,g++, test.cpp -o 测试 (xdb@localhost 测试),美元/测试 - - - - -在E1 8 6021 a0 6021 a0 6021 a4 6021 a5 - - - - -在E2 12 6021 a8 6021 a8 6021 ac 6021 b0 - - - - -在E3 16 6021年c0 6021 c0 6021 c2 6021 c4 6021 c8 - - - - -在E4 24 6021年d0 6021 d0 6021 d8 6021 e0 6021 e2 - - - - -在E5 6 - - - - -在E6 3. - - - - -在E7 24 602200,602200,602200,602210 - - - - -在E8 9 - - - - -在E9 24 602230,602230,602240 - - - - -在E10 1 [xdb@localhost 测试]$
到此,关于“C语言中结构体结构怎么对齐”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!