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了。
瞭解了聯合體共用內存的概念,也就是明白了爲什麼每次只能對其一個成員賦值了,由於若是對另外一個賦值,會覆蓋了上一個成員的值。

是的,函數的重載是在編譯的時候發生,而虛函數是在運行的時候肯定。其實有時候稱函數的重載爲靜態多態性,而虛函數爲動態多態性
相關文章
相關標籤/搜索