c 結構體 共用體和列舉

2022-09-05 01:42:09 字數 1183 閱讀 4069

結構體型別

c++中的結構體成員既可以是資料,也可以是函式

c語言中定義結構體變數必須加struct(這也是很多時候和typedef),但是在c++裡面,可以不加

結構體和類的不同在於,結構體中的變數預設是public型別,而類則預設是private

struct空間計算:

1)整體空間是占用空間最大成員(型別)的整數倍,但是在linux +c++環境下,如果最大成員型別佔據的位元組書超過4,那麼整體空間是4的倍數即可。

2)資料對齊原則,記憶體按照結構提成員先後順序排列,當排到該成員變數時候,其前面已占用的空間大小必須為該型別的整數倍,否則補齊(在linux系統下),當該類性佔據空間》=4位元組的時候,依舊僅需要是4的倍數即可。

struct s1;

在windows下是24,在linux下是20

對於包含子結構體的空間計算:

1)整體空間是子結構體與父結構體占用空間最大成員(型別)的整數倍,但是在linux +c++環境下,如果最大成員型別佔據的位元組書超過4,那麼整體空間是4的倍數即可。

2)資料對齊原則,記憶體按照結構提成員先後順序排列,當排到該成員變數時候,其前面已占用的空間大小必須為該型別的整數倍,否則補齊(在linux系統下),當該類性佔據空間》=4位元組的時候,依舊僅需要是4的倍數即可;當排到子結構體成員變數時候,其前面已占用的空間大小必須為子結構體中最大型別大小的整數倍,否則補齊(在linux系統下),當該類性佔據空間》=4位元組的時候,依舊僅需要是4的倍數即可。。

對於包含陣列的結構體空間計算:

結構提中,陣列是按照單個變數乙個乙個進行拜訪,而不是視為整體。

stuct{

int a;

char b[8];

占用大小為12

綜上,對於結構體中包含結構體或陣列的情況,在考慮對齊或者總空間為最大元素占用空間的倍數的時候,亦陣列或者結果體中單獨元素(最大)占用的空間為準,但是結構體和陣列本身占用的空間不變。

還有包含位域的結構體大小計算,這個暫時不管。

共用體型別

一次僅採納乙個變數,所佔空間為各個成員占用空間最大者

列舉型別:

占用空加一定為4

C 結構體 共用體和列舉

結構體就不做多的介紹了,只說說他的位欄位 struct sct 共用體是一中資料格式,他能夠儲存不同的資料型別,但只能同時儲存其中的一種型別。include using namespace std union uno int main 列舉可以代替const,在預設情況下,列舉變數的列舉值為0,1,...

C 結構體 共用體 列舉

一 結構體 首先為什麼要使用結構體?比如說你要儲存乙個學生的資訊,包含 姓名 char 學號 int 成績 double 我們希望可以把這些資訊放在乙個單元中,陣列滿足不了這種要求,因為陣列中每個元素的型別是一樣的。所以我們就需要別外一種資料格式,以就是現在要說的結構體 結構體是由使用者自己定義的一...

C結構體 共用體 列舉

一 結構體三種定義方式 1 先宣告結構體型別,再定義變數名 struct student struct student student1,student2 2 在宣告型別的同時宣告變數 struct student student1,student2 3 直接定義結構體型別變數 struct stu...