結構體 位段以及聯合的計算 自定義型別部分知識

2021-08-16 10:39:49 字數 2440 閱讀 4054

1**——結構體型別建立**

(1)介紹——struct在c語言中是乙個關鍵字,用於定義結構資料型別;「結構」是一種構造資料型別,現在一般叫做使用者自定義資料型別,它是由若干「成員」組成的。 每乙個成員可以是乙個基本資料型別或者又是乙個構造型別。 結構即是一種「構造」而成的資料型別, 那麼在說明和使用之前必須先定義它,也就是構造它。如同在說明和呼叫函式之前要先定義一樣。

(2)格式——語法格式:

struct 新型別名稱

(3)例子

struct student 

;

2 結構體初始化——初始化的4種方式

(1)定義的同時初始化(結構體巢狀初始化)  

struct student s = ;

(2)先定義再逐個初始化

struct student s;

s.name = "zhangsan"

; s.age = 20

; s.score =85

; s.*** = "nan"

; (3)先定義再一次性初始化

struct student s;

s = (struct student);

注意:結構體和陣列在這裡的區別,陣列不能先定義再進行一次性初始化

結構體要明確的告訴系統{}中是乙個結構體

(4)指定將資料賦值給指定的屬性

struct student s = ;

3 結構體內存對齊——結構體的對齊規則:(1)平台原因;(2)效能原因。

舉例:

(1)位段——注意:位段也是一種結構體;為了省空間;不跨平台。

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

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

(2)計算

(3)位段記憶體的分配

@ 位段的成員可以是int 、unsigned int 、signed int或者是char(屬於整形家族)型別;

@ 位段的空間上是按照需要以4個位元組(int)或者1個位元組(char)的方式來開闢的;

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

1——列舉

(1)列舉就是一一枚舉的意思

(2)列舉型別的定義:

`enum

day;

`注意:{}中的內容就是列舉型別的可能取值,也叫列舉常量;這些可能取值都是有值的,預設從0開始,一次遞增1,定義時也可賦值。

(3)列舉的優點:

@ 增加**的可讀性和可維護性;

@ 跟#define定義的識別符號比較列舉有型別檢查,更加嚴謹;

@ 防止了命名汙染(封裝);

@ 便於除錯;

@ 使用方便,一次可以定義多個常量。

2——聯合(共用體)

(1)聯合:也是一種特殊的自定義型別,也包含一系列的成員,特徵是這些成員公用同一塊空間。「

例如:union un

;

大小為4 公用同一塊空間。

(2)計算

聯合的大小至少是最大成員的大小;

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

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

include include include 1 結構體 結構是一些值的集合,這些值稱為結構體成員,結構體的每個成員可以是不同型別的變數 struct stu 結構體的自引用 struct node 錯誤的,結構體內不能包含結構體自身 struct node 正確 指標是四個位元組 結構體內存對齊...

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

1 結構體基礎知識 定義 不同或相同型別元素的集合 宣告 直接上例子會更清楚 成員 可以是變數 陣列 指標甚至其它結構體成員。struct stu 分號不能丟特殊宣告 匿名結構體型別,並不建議省略結構體型別名,知道有這麼回事就好了 struct x 注意 有n個結構體就有n種型別,即使兩個結構體成員...

自定義型別(結構體 位段 列舉和聯合)

結構體常用於資料的大體模板相同,但具體的內容不同。例如 學生的資訊都包括學號,姓名,年齡等資訊,但是每個學生的資訊的內容不同。這時就要用到結構體的建立。1.定義結構體變數 以學生資訊為例 struct stu student 也可以用struct stu student 來定義結構體變數。當然也可以...