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 來定義結構體變數。當然也可以...