復合資料型別

2021-09-19 07:47:27 字數 2657 閱讀 6004

這章內容主要是結構體,共用體,列舉型別,注意了解和掌握。

1.關鍵字的拼寫

結構體    關鍵字    struct

共用體 關鍵字 union

列舉型 關鍵字 enum

型別別名 關鍵字 typedef

2.會定義結構體,定義結構體變數並初始化,定義結構體指標並初始化?

定義結構體:

struct student

;定義結構體變數並初始化:

struct student a;

a = ;

定義結構體指標並初始化:

結構體指標變數是乙個用來存放指向結構體變數的指標變數,該指標變數的值就是它指向的結構體變數的起始值。

struct 結構體名 *結構體指標變數名;

例:struct object

;main()

; struct object *p = &a;

printf("%s%.2f%.2f \n",(*p).name,(*p).high, (*p).weight);

}

3.結構體中的記憶體空洞指什麼?

所謂的記憶體空洞,就要提及字對齊和半字對齊。在結構體中,將不同型別的,互相關聯的資料組成乙個有機的整體。因此在不同的資料型別定義過程中,容易出現記憶體空洞。

比如: 

(1) char a; (2) char a;

int b; char c;

char c; int b;

雖然這兩個定義結果是一樣的,但佔據的記憶體是不同的。在32位的系統中,是以4個位元組為乙個單元,int 型別資料佔4個位元組,char 型資料佔1個位元組。故(1)的寫法佔12個位元組,(2)的寫法佔8個位元組

4.定義共用體,定義共用體變數即初始化,定義共用體指標並初始化

共用體與結構體的不同的是:結構體變數的各成員占用連續的不同的儲存單元,而共用體變數的各成員占用相同的儲存單元。由於共用體型別將不型別的資料在不同時刻儲存到同一記憶體區域內,因此使用共用體型別可以更好地利用儲存空間。

共用體的定義:

union grade

定義共用體變數並初始化:

union student a;

a = ;

定義共用體指標並初始化

union object

;main()

; unionobject *p = &a;

printf("%s%.2f %.2f \n",(*p).name,(*p).high , (*p).weight);

}

5.共用體的特點?

(1)記憶體中每一瞬間只有乙個成員起作用。

(2)起作用的成員是最後一次存放的成員。

(3)共用體變數的位址與其個成員的位址相同。

(4)不能在定義共用體變數時進行初始化。

(5)不能把共用體變數作為函式引數,也不能使函式帶回共用體變數,但可以用指向共用體變數的指標。

(6)共用體型別可以出現在結構體型別定義中,也可以定義共用體陣列。反之,結構體也可以出現共用體型別的定義中,陣列也可以作為共用體的成員。

6.大端位元組序 vs 小端位元組序

端模式分為:小端位元組序和大端位元組序,也就是位元組在記憶體中的順序。

小端位元組序:低位元組存於記憶體低位址;高位元組存於記憶體高位址。如乙個int型資料0x12345678

0x0029f458  0x78

0x0029f459  0x56

0x0029f45a  0x34

0x0029f45b  0x12

在以上資料存放於記憶體中的表現形式中,0x0029f458 < 0x0029f459 < 0x0029f45a < 0x0029f45b,

可以知道記憶體的位址是由低到高的順序;而資料的位元組也是由低到高的,故以上位元組序是小端位元組序。

0x0029f458  0x12

0x0029f459  0x34

0x0029f45a  0x56

0x0029f45b  0x79

在以上資料存放於記憶體中的表現形式中,0x0029f458 < 0x0029f459 < 0x0029f45a < 0x0029f45b,

可以知道記憶體的位址是由低到高的順序;而資料的位元組卻是由高到低的,故以上位元組序是大端位元組序。

定義列舉型別,並且說明 enum vs define?

列舉型別定義:

enum weekday ;

巨集和列舉之間的差別主要在作用的時期和儲存的形式不同,巨集是在預處理的階段進行替換工作的,它替換**段的文字,程式執行的過程中巨集已不存在了。而列舉是在程式執行之後才起作用的,列舉常量儲存在資料段的靜態儲存區里。巨集占用**段的空間,而列舉除了占用空間,還消耗cpu資源

但也不能就此說巨集比列舉好,如果需要定義非常多的整數常量,用一條enum 明顯比一大堆define更清晰,列舉也可以用來定義一些特殊型別,比如

bool,如:typeenum  bool;

復合資料型別

復合資料型別 作用 封裝資料 多種不同型別資料存放在一起 應存放在全域性,在訪問結構體中的變數時,應用stu.id stu.name 初始化的方式 在對陣列進行初始化時 strcpy stu.name,zhangsan 在對指標進行初始化時 char name 對name進行初始化 stu.name...

復合資料型別

一 struct結構體 封裝資料 存放多種不同的資料型別 struct的宣告放在全域性區 1.宣告和定義 宣告 struct student struct student stu array 3 int i for i 0 i 3 i for i 0 i 3 i include struct stu...

復合資料型別

結構體 作用 封裝資料 把多種不同的資料型別放在一起 注意 一般放在全域性 分號不能省略。結構體變數用點訪問 結構體指標用 訪問 初始化 靜態初始化 動態初始化 使用注意事項 給結構體中的陣列成員賦值時,不能直接將字串賦給陣列名,可以使用strcpy函式 給結構體中的指標變數成員賦值時,要先給指標分...