一. struct與union的差異
- 當你宣告了一個struct他所佔的記憶體空間會是所有的membrt大小加起來, 舉個例:
struct example_struct{
double a;
int b;
};
從上面的struct我們可以簡單的計算整個struct所佔用的空間是12byte. 接下來我們來看union.
union所佔用的記憶體空間只會是member當中最大的一個member的size. 舉個例子來說明:
union example_union{
double a;
int b;
};
這個union所佔用的記憶體空間為8byte. 相對於struc來說是較省空間, 但是使用上必須特別小心,為什麼這麼說呢? 下面再舉個例子:
/************************ example_1,c ********************/
#include <stdio.h>
struct example_struct{
int a;
char b;
};
union example_union{
int a;
char b;
};
int main()
{
struct example_struct m_struct;
union example_union m_union;
//struct
m_struct.a = 3;
printf("m_struct.a=%d\n", m_struct.a);
m_struct.b = 'c';
printf("m_struct.a=%d, m_struct.b=%d\n\n", m_struct.a, m_struct.b);
//union
m_union.a = 3;
printf("m_union.a=%d\n", m_union.a);
m_union.b = 'c';
printf("m_union.a=%d, m_union.b=%d\n", m_union.a, m_union.b);
}
/*********************************************************/
輸出結果如下:
m_struct.a=3
m_struct.a=3, m_struct.b=99
m_union.a=3
m_union.a=99, m_union.b=99 //<===== the value of m_union.a is modified by m_union.b
二. 各個型態宣告所佔的記憶體大小
在研究上半部分的同時另外發現了long這個型態在32bit與64bit電腦上宣告所佔的記憶體大小是不相同的(不同的地方我用Bold顯示)。
32bit:
long size is 4
char size is 1
unsigned long size is 4
int size is 4
float size is 4
double size is 8
64bit:
long size is 8
char size is 1
unsigned long size is 8
int size is 4
float size is 4
double size is 8