淘客返利怎么做网站,wordpress导航美化,企业策划书范文,有什么做视频的免费素材网站好参考#xff1a;Difference between Structure and Union in C 二者区别
struct
这里不做详细说明#xff0c;因为参考链接中都写明了。只做一些重点强调。
struct中声明的变量#xff0c;在分配空间的时候#xff0c;struct结构空间大小#xff0c;大于等于其内部所有… 参考Difference between Structure and Union in C 二者区别
struct
这里不做详细说明因为参考链接中都写明了。只做一些重点强调。
struct中声明的变量在分配空间的时候struct结构空间大小大于等于其内部所有变量大小的总和一般会大于因为需要字节对齐。
我们看一个例子
#include stdio.hstruct MyStruct
{char c;int a;char x;double b;
};int main()
{MyStruct s;s.c c;s.a 1000;s.x D;s.b 11.5;return 0;
}我们依次看看其赋值情况就可以知道内存分布了。
执行s.c c 执行s.a 1000 可以看到中间跳过了3个字节因为int需要4字节对齐。
继续执行s.x D s.b 11.5 double需要8字节对齐因此中间跳过了7个字节。
所以对于结构体来说其内存分布是
所以结构体大小是24字节 验证一下没什么问题。
对于结构体没什么好说的无非就是有相关需求需要一个结构有不同的数据类型。
值得说明的是结构体可以嵌套例如
struct{struct{struct{...}}int x;
}访问上来说如果没名字就直接访问有名字就多几个.指的是这种命名
struct{}name;不过嵌套结构似乎很少用吧…
union
最大的区别就是联合体中定义的不同数据类型在分配空间的时候是重叠的也就是说它的大小应该以占用最大空间的内个为准要等于它的大小。
#include stdio.hunion MyUnion
{int a;double b;char c;
};int main()
{MyUnion b;b.a 10;b.b 1.0;b.c a;return 0;
}b的大小是8也就是最大的double的大小。
我们依次运行看看
b.a 10 b.b 1.0 b.c a 你会发现都是在这8字节的空间内进行的
但是注意覆盖问题。
对于同一块8字节的内存空间覆盖的时候只覆盖自己占的地方例如对于8字节空间改变占1字节的char的时候只覆盖第一个字节剩下的7字节保持不变。
最后它也同样可以嵌套。
至于访问的时候的变化只需要明确访问的都是对应大小的内存单元。
因此不管谁改都是该内存至于值
如果访问的是double就是把这8个字节转换为double如果访问的是int就把前4个字节转换为intchar同理。