自定義型別 結構體,列舉,聯合

2021-10-14 04:49:20 字數 1001 閱讀 9353

結構體的自引用

正確的自引用方式

struct node

結構體變數的記憶體對齊問題

對其規則

1.第乙個成員在與結構體變數偏移量為0的位址處。

2. 其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。

對齊數 = 編譯器預設的乙個對齊數 與 該成員大小的較小值。

vs中預設的參照值為8 linux中的參照值為4

3. 結構體總大小為最大對齊數(每個成員變數都有乙個對齊數)的整數倍。

4. 如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是

所有最大對齊數(含巢狀結構體的對齊數)的整數倍。

總的來說:結構體內存對其是拿空間來換取時間

可以使用#pragma pack() 命令修改預設對齊數

位段

1.位段的成員必須是整型家族的成員

struct a

;

2.位段的空間上是按照需要以4個位元組或者1個位元組的方式來開闢的

3.位段涉及很多不確定因素,位段是不跨平台的,注重可移植的程式應該避免使用位段

列舉

1.列舉型別本質是int,而且預設情況是從0開始依次遞增的int

2.列舉是一種型別,在編譯的時候會進行型別檢查,巨集是基於替換原則,在這個過程中,並不進行任何檢查工作。

3.巨集的應用場景》列舉

聯合體

1.聯合體本身的大小並不是把所有的型別加起來的大小

2.常規而言,聯合體的大小是由聯合體內最大元素的大小決定的。決定了之後,所有元素共享空間

3.在使用union的時候,一次只會訪問乙個元素

4.聯合體也要考慮記憶體對齊問題

5.聯合體的最終大小,要能整除聯合體內的最大對齊數

自定義型別 結構體 列舉 聯合

結構體 所謂結構體,就是將一大堆值放在一起,建立乙個新的型別,這些成員可以是不同型別的變數。struct tag variable list tag 要求 1.見名知意 2.可以省略 3.不建議省略 member list c語言中,不能為空 variable list 變數列表,可以省略,建議省略...

自定義型別 結構體,列舉,聯合

首先先說一下c語言的資料型別,其框架型別如圖所示 今天主要說一下結構體,列舉,聯合這三種自定義型別。1,結構體 1.1 結構體的宣告 結構體是一些值的集合,這些值稱為成員變數,結構體的每個成員可以是不同型別得變數。1 結構體的成員 結構體的成員可以是標量,陣列,指標,甚至是其他結構體。2 結構體的宣...

自定義型別 結構體,列舉,聯合

結構體的宣告 struct tag variable list 例如描述乙個學生 struct stu 分號不能丟特殊的宣告 在宣告結構的時候,可以不完全的宣告。比如 匿名結構體型別 struct x struct a 20 p 警告 編譯器會把上面的兩個宣告當成完全不同的兩個型別。所以是非法的。結...