2_ 如何寫一份詳細的網(wǎng)站開發(fā)方案鄭州seo代理外包公司
目錄
聯(lián)合體概述
聯(lián)合體的內(nèi)存分配
聯(lián)合體大小計算
聯(lián)合體概述
聯(lián)合與結(jié)構(gòu)非常的相似,主要區(qū)別就在于聯(lián)合這兩個字。
聯(lián)合的特征:聯(lián)合體所包含的成員變量使用的是同一塊空間。
聯(lián)合體定義
//聯(lián)合類型的聲明
union Un
{char c;int i;
};
//聯(lián)合變量的定義
union Un un;
這與結(jié)構(gòu)體很相像,但是當我們計算一下它的大小時:
結(jié)果是?4。如果它是結(jié)構(gòu)體的話,那么結(jié)果應該是?8。
聯(lián)合體的內(nèi)存分配
有這樣一個聯(lián)合體類型:
union Un
{char c;int i;double n;
};union Un un;//定義變量
我們采用暴力的方法,直接打印un每個成員的地址看看:
int main()
{union Un un;printf("%p\n", &un);printf("%p\n", &un.c);printf("%p\n", &un.i);printf("%p\n", &un.n);return 0;
}
運行之后
它們的起始地址都相同,也就說明他們所用的其實就是同一塊空間?。
這也就意味著,我們要改變?nèi)魏我粋€成員變量的值,都會改變另外兩個成員變量的值。
例如:現(xiàn)在un的i中存入0x11223344
int main()
{union Un un;un.i = 0x11223344;return 0;
}
然后改變un的c的值,看看內(nèi)存如何變化:?? ?un.c = 0x55;
聯(lián)合體大小計算
聯(lián)合的大小至少是最大成員的大小。
當最大成員大小不是最大對齊數(shù)的整數(shù)倍的時候,就要對齊到最大對齊數(shù)的整數(shù)倍。
union Un1
{char c[5];int i;
};
union Un2
{short c[7];int i;
};
//下面輸出的結(jié)果是什么?
printf("%d\n", sizeof(union Un1));
printf("%d\n", sizeof(union Un2));
結(jié)果如下:8? 16