結構體和聯合體的區別

2021-08-17 09:49:12 字數 636 閱讀 9803

首先,聯合體的各個成員共用記憶體,並應該同時只能有乙個成員得到這塊記憶體的使用權(即對記憶體的讀寫),而結構體各個成員各自擁有記憶體,各自使用互不干涉。所以,某種意義上來說,聯合體比結構體節約記憶體。

舉個例子:

typedef struct

a;typedef union

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了。

了解了聯合體共用記憶體的概念,也就是明白了為何每次只能對其乙個成員賦值了,因為如果對另乙個賦值,會覆蓋了上乙個成員的值。

(1)在struct中,各成員都占有自己的記憶體空間,它們是同時存在的。乙個struct變數的總長度等於所有成員長度之和。在union中,所有成員不能同時占用它的記憶體空間,它們不能同時存在。union變數的儲存長度為其中最大型別的整數倍,且要大於等於最大成員的大小。 (2)對於union的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在了, 而對於struct的不同成員賦值是互不影響的

結構體和聯合體

結構體是一些值的集合,這些值成為它的成員。這和陣列有些類似。結構體和陣列最大的不同是,陣列的元素都是相同型別的,而結構體裡的成員可以具有不同的型別。陣列元素可以通過下標來訪問,而結構體成員長度可能不同,所以不能通過下標訪問。每個結構體成員都有自己的名字,所以結構體成員是通過名字訪問的。結構體變數屬於...

聯合體和結構體

一 前言 聯合體 union 與 結構體 struct 有一些相似之處。但兩者有本質上的不同。在結構體中,各成員有各自的記憶體空間,乙個結構變數的總長度是各成員長度之和 而在 聯合 中,各成員共享一段記憶體空間,乙個聯合變數的長度等於各成員中最長的長度 應該說明的是,這裡所謂的共享不是指把多個成員同...

結構體聯合體

在c中,結構也是一種資料型別,可以使用結構變數,因此,象其它型別的變數一樣,在使用結構變數時要先對其定義。定義結構變數的一般格式為 struct 結構名 結構變數 結構名是結構的識別符號不是變數名。型別為第二節中所講述的五種資料型別 整型 浮點型 字元型 指標型和無值型 構成結構的每乙個型別變數稱為...