自定義型別

2021-10-10 18:09:35 字數 1716 閱讀 2750

1.普通結構體

struct tag

variable-list;

2.匿名結構體

struct

x;

struct node

1.普通結構體定義和初始化

struct point

p1;//p1為結構體型別的變數

struct point p2;

//定義結構體變數p2

struct point p3 =

;//初始化結構體變數

2.巢狀結構體定義和初始化

struct node

n1 =

,null

};

1.為什麼要記憶體對齊

如果不記憶體對齊,因為硬體平台的限制,進而訪存次數增加,進而降低效率

2.什麼是記憶體對齊

通過犧牲空間的方法來換取效率的提公升叫做記憶體對齊

3.記憶體對齊的原則

(1)第乙個元素不需要對齊,直接存放

(2)其他成員變數要對齊(指的是起始偏移量能夠整除對齊數)到某個數字(對齊數)的整數倍的位址數

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

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

1.#pragma pack(2),修改預設對齊位元組數為2,對齊數取2與結構體變數對齊數的較小值

2.#pragma pack(),取消設定的預設對齊數,還原為預設

1.位段的成員可以是int,unsigned int或signed int

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

struct a

;//printf("%d\n",sizeof(struct a)); 2

#include

#define max_size a+b

struct _record_struct

*env_alarm_record;

intmain()

執行結果:

31.中存放的是列舉常量

2.預設從0開始,依次增1

1.增加**的可讀性和可維護性

2.和#define定義的識別符號比較,列舉有型別檢查,更加嚴謹

3.防止了命名汙染

4.便於除錯

5.使用方便,可以一次定義多個變數

1.聯合的成員是共同用同一塊記憶體空間

2.聯合體的大小至少是最大成員的大小

3.當最大成員大小不是最大對齊數的整數倍的時候,就要對齊到最大對齊數的整數倍

示例

#include

union un

;union un un;

intmain()

執行結果:

00c1a13c

00c1a13c

#include

intmain()

;union un un;

un.i =1;

printf

("%d\n"

, un.c)

;return0;

}

執行結果:

1

自定義型別

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都是定義的列舉型別,中的內...