C的联合体和结构体区别

联合体与结构体是很容易混淆的概念。粗略一看,二者不管声明、定义仍是定义对象的方式都很类似。然而这两个东西的概念和做用实际千差万别。
首先,联合体的各个成员共用内存,并应该同时只能有一个成员获得这块内存的使用权(即对内存的读写),而结构体各个成员各自拥有内存,各自使用互不干涉。因此,某种意义上来讲,联合体比结构体节约内存。
举个例子:
typedef struct
{
int i;
int j;
}A;
typedef union
{
int i;
double j;
}U;
sizeof(A)的值是8,sizeof(U)的值也是8(不是12)。
为何sizeof(U)不是12呢?由于union中各成员共用内存,i和j的内存是同一块。并且总体内存大小以最大内存的成员的划分。即U的内存大小是double的大小,为8了。sizeof(A)大小为8,由于struct中i和j各自获得了一块内存,每人4个字节,加起来就是8了。
了解了联合体共用内存的概念,也就是明白了为什么每次只能对其一个成员赋值了,由于若是对另外一个赋值,会覆盖了上一个成员的值。

是的,函数的重载是在编译的时候发生,而虚函数是在运行的时候肯定。其实有时候称函数的重载为静态多态性,而虚函数为动态多态性
相关文章
相关标签/搜索