主要區別
結構和聯合都是使用者定義的資料型別,包含不同資料型別的變數。它們在定義、宣告變數和檢索成員時都有相同的語法。結構和聯合仍然有許多不同之處。在結構上,每個成員在記憶體中都有獨立的空間。在union中,分配的總記憶體空間等於大小最大的成員。所有其他成員共享相同的記憶體空間。這是結構和聯合的最大區別。
什麼是結構(structure)?
結構使用其成員的所有記憶體。在結構上,我們可以接納任何序列中的任何成員。
什麼是聯盟(union)?
聯合使用最大成員的記憶體空間。在union中,我們只能訪問最近儲存其值的變數。
主要區別
- 在結構上,每個成員在記憶體中都有獨立的空間。在union中,分配的總記憶體空間等於大小最大的成員。所有其他成員共享相同的記憶體空間。這是結構和聯合的最大區別。
- 在結構上,我們可以接納任何序列中的任何成員。而在union中,我們只能訪問值最近被儲存的那個變數。
- 所有成員都可以在宣告結構變數時進行準備。宣告union變數時只能初始化第一個成員。在上面的例子中,我們只能在宣告變數時修改變數roll no。
- 在一個結構中,所有成員都得到分配的記憶體,並且成員的地址隨著減速器從左到右的讀取而增加。也就是說,一個結構的構件都是從結構底部的不同偏移開始的。對於聯合編譯器,為所有成員中最大的一個分配記憶體,並且在聯合中,所有成員的基偏移量為零,容器足夠大,可以容納最寬的成員,並且對齊方式適用於聯合中的所有型別。
- 在一個結構中,所有成員都被分配了記憶體,因此任何成員都可以在任何時候被檢索。從聯合檢索資料時,要檢索的型別必須是最近儲存的型別。
- 一個結構的一個或多個成員可以一次初始化。聯合只能用其第一個成員型別的值初始化;因此,上面描述的聯合u(在示例宣告期間)只能用整數值初始化。
- 儲存結構變數的記憶體量前提條件是所有成員的大小之和。另一方面,在聯合的情況下,所需的記憶體量始終等於其最大成員所需的記憶體量。
- 對於union,您只能假設使用其中一個元素,因為它們都儲存在同一個位置。這使它在您想要儲存可能是幾種型別之一的內容時非常有用。另一方面,一個結構的每個元素都有一個單獨的記憶體位置,它們都可以一次使用。