C 結構體和聯合體

2021-10-09 08:45:37 字數 1244 閱讀 2007

結構體資料對齊問題

使用union定義的是聯合體

利用union可以用相同的儲存空間儲存不同型別的資料型別,從而節省記憶體空間。當訪問其內成員時可用".「和」->"來直接訪問。

當多個資料需要共享記憶體或者多個資料每次只取其一時,可以利用聯合體(union)。在c programming language 一書中對於聯合體是這麼描述的:

1)聯合體是乙個結構;

2)它的所有成員相對於基位址的偏移量都為0;

3)此結構空間要大到足夠容納最"寬"的成員;

4)其對齊方式要適合其中所有的成員;

union score

//長度8

//使用struct定義的是結構體

struct student

cout <<

sizeof

(score)

<< endl;

//長度9

cout <<

sizeof

(student)

<< endl;

//長度18

注意:記憶體分配的原則,以最大的元素為基礎,長度是最大元素長度的整數倍。

struct s1

//長度為24位元組。

struct s2

//長度為16

修改預設編譯選

visual c++:

#pragma pack(n)

g++:

attribute(aligned(n))

attribute(packed)

例如:n改為1則是連續的記憶體空間。

C 結構體 聯合體

結構體是特殊形態的類,與類的區別 結構體的預設訪問許可權是public,也就是說當你建立資料成員的時候,預設是屬於public類,存在的主要原因 與c語言保持相容。結構體 struct 學生資訊 include include include using namespace std struct s...

結構體和聯合體

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

聯合體和結構體

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