1、構造資料型別:
之前我們學習了基礎資料型別(int、double、float、char等),陣列型別、指標型別,這些都屬於簡單資料型別,而c語言支援使用基本資料型別構造出新的復合資料型別。
2、結構型別定義、宣告:
對於有些資料,它是由若干不同型別的資料成員組合而成的一種複雜的構造型資料,而陣列只允許儲存相同型別的資料;多個陣列之間不能建立關聯關係;的侷限性決定了需要建立一種新的復合資料型別來儲存複雜型別的資料,因此,結構型別應運而生。(結構型別屬於值型別)
定義結構型別:
struct結構名稱
;例如:
1struct
pupil
3;
結構定義不預留記憶體,只是標識出連續區域,以便將來儲存不同型別資料;
結構定義一般置於程式標頭檔案宣告之後;
使用結構之前需要先宣告結構變數,宣告結構變數將會為該變數分配記憶體,大小大於或等於其所有成員變數的大小之和(sizeof);格式如下:
struct結構名稱結構變數;
例如:struct pupil p1, p2;
另外,我們還可以巢狀的方式使用乙個結構體構建另乙個結構體,示例如下://但是不能使用乙個結構體巢狀這個結構體它本身。
1struct
date27
8構造:
9struct
pupil
10
3、訪問結構成員、初始化、賦值:
訪問結構成員,我們可以使用點運算子」.」來訪問,格式:
結構變數.結構成員
例如:p1.num、p1.name、p1.score、p1.birth.year等;
我們可以通過直接賦值、訪問結構成員的方式為結構賦值:
4、結構指標訪問成員:
5、結構型別的定義:
可以使用typedef來定義真實型別名,來替換宣告結構的標記,例如:定義part的型別:
1 typedef structpart; //
名稱part必須出現在定義的末尾,而非struct後邊;
之後,我們可以像使用內建型別那樣使用part了,例如:
宣告變數:part part1, part2; part是typedef的名字,之前無需書寫struct。
1⃣️相當於通過typedef為結構體起了乙個別名,可以直接使用別名表示結構體,無需struct關鍵字指示;
2⃣️結構陣列:對於同為一種結構型別的多個資料,我們可以使用結構陣列來存放這些資料。
6、列舉型別:
對於變數只有少量有意義的值我們可以用兩種方式來表示:
使用#define巨集定義
使用列舉
1enum suit ; enum
suit s1, s2;
23 typedef enum
suit; suit s1, s2; 4//
或者:5 typedef enum bool; //
typedef修飾時,可將列舉作為型別使用,之前不必加enum(同理struct的定義)
列舉可作為整數(預設從「0」開始順序賦予整數值,有時需要定義列舉起始值):
1enum suit ;
23 typedef enum suit;
C C 資料型別 列舉
列舉型別的目的是提高程式的可讀性,可以使用關鍵字enum建立新型別 例 enum spectrum enum spectrum color 分析 第一句宣告spectrum為標記名,可以將enum spectrum作為乙個型別名使用 第二句將color變數定義為該型別 第一句的括號中的識別符號列舉了...
列舉資料型別C
列舉資料型別是一種由程式設計師定義的資料型別。其合法值時與它們關聯的一組命名整數常量。它之所以被稱為列舉型別,是因為命名常量是作為資料型別定義的一部分而列舉或列出的。以下是列舉型別宣告的示例 enum roster 該語句將建立乙個名為roster的資料型別。因為enum是c 關鍵字,所以它必須小寫...
OpenCV Mat資料型別構造
mat 的大致的資料結構可以理解為 row col 規模的矩陣,矩陣中的每個元素,是規格統一但不確定的資料元,統稱為scalar,而scalar的格式大致為 a b,c,d 這樣的向量或者標量,向量的長度有時可以被理解為通道數,資料的具體型別有時可以被理解為深度,即該數占用多少位元來完成描述。mat...