自定義型別

2021-08-26 20:38:00 字數 1185 閱讀 6555

1.平台原因:不是所有的硬體平台都能訪問任意位址上的任意資料的;某些硬體平台只能在某些位址處取某些特定型別的資料,否則丟擲硬體異常

2.效能原因:資料結構(尤其是棧)應該盡可能地在自然邊界上對齊

–>若訪問未對齊的記憶體,處理器需要做兩次記憶體訪問;而對齊的記憶體訪問僅需要訪問一次就可以拿到資料

linux中,預設對齊數是4

windows下的vs,預設對齊數是8

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

2.其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處—>對齊數=編譯器預設的乙個對齊數與該成員大小的較小值

3.結構體總大小為最大對齊數的整數倍

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

可以說,記憶體對齊是用時間來彌補空間

結構體傳參時,考慮變數可能過大,不要傳結構體變數,要傳結構體指標

位段的宣告和結構是類似的,有兩個不同點:

1.位段的成員必須是int、unsigned int 或 signed int

2.位段的成員後邊有乙個冒號和乙個數字

位段成員後面的數字表示bit位,位段可以節省空間

開闢空間方式

由於位段裡變數為int型別,因此在開闢空間時,一次開闢4個位元組的空間,即32個bit位。

需要注意的是:位段是不可以跨平台的、位段不存在對齊

列舉,即一一枚舉

列舉列舉的是列舉常量,第乙個常量為0,之後的常量大小依次+1

列舉的優點

在共用體中定義的變數共用一塊記憶體

空間計算

ip位址是由點分十進位制的方式處理的

ip位址實際是整型的十進位制數字,將十進位制數字的每個位元組轉化成轉化成十進位制,再用.連線,就是ip位址

**實現:

#include 

#include

union un;};

int main()

歡迎交流~~

自定義型別

typedef型別 typedef 已有型別 新建型別 示例 typedef double area,volume typedef int number number i1 area a enum enum 列舉型別名 enum week 預設sun 0,可以比較 如果修改必須形如enum week...

自定義型別

下面列舉幾種c語言中常用的自定義資料型別 1.結構體型別 當描述乙個整型變數時,可以用int,描述字元型變數時,可以用char,但要描述乙個學生時,因為這個學生包含的資訊很多,比如姓名,性別,年齡等,不能通過單一的型別來描述,所以,這裡引入結構體型別,將某個事物的共有屬性集合在一起,宣告乙個結構體型...

自定義型別

列舉從字面意思理解就是將可能取的值一一枚舉出來,列舉型別沒有成員 可言,裡邊存放的是可能取值。列舉型別的定義 enum day enum color printf d n red printf d n green printf d n blue 執行結果 day和color都是定義的列舉型別,中的內...