C語言小結之結構類型
@刁鑽的游戲
(1)枚舉型類型
enum COLOR {BLACK,RED,BLUE};
//聲明一種新的數據類型,其值分別為0,1,2但是用BLACK/RED/BLUE代表
也可以這莫做
enum COLOR {RED = 1,YELLO,BLUE};//則值為1,2,3
enum的本質還是int型
應用:可以表示一列const int,用它來做符號量。
(2)結構類型
結構體類型就是一個復合數據類型,就是一個變量,下面包含著一些數據。
1>結構體聲明
方式一:聲明結構體
struct point{//創建結構體類型 int x; int y; }
struct point P1;//聲明point類型變量 P1
方式二:單純想要兩個變量,而不想聲明這種結構類型
struct{ int x; int y; }p1,p2;
方式三:同時做兩件事,一則創建結構體變臉類型,二則聲明兩個結構體變量
struct point{ int x; int y; }p1,p2;
2>結構體變量賦值
struct point p1 = {12,32};
struct point p2 = {,y=10};//為賦值的默認為0
注意:前面要跟上struct
3>結構成員的訪問和使用
使用.域操作符
p1.x = 2;
z = p1.y;
可以對整體賦值,譬如:P1 = (struct point){4,5};
4>函數中傳遞的是值不是地址,如果我們想改變本身變量,應該傳入地址
&p1
p1->x表示P1中的成員變量x
思想:函數中,傳入一個結構體,不如只穿結構體的指針,然後在函數體裡面進行使用
5>結構數組
point P1[2] = {{1,2},{2,3}};//兩個坐標P1[0] = {1,2} P2[1]={2,3}
print(point *p1) { printf("x=%d,y=%d",p1->x,p1->y); }
(3)自定義數據類型
struct創建的自定義數據類型,在聲明變量時都要跟上struct
typedef提供了數據類型別名
例如
typedef int LENGTH//表示為int起了個別名叫做LENGTH
則以後可以這樣使用
LENGH l1,l2;
所以我們可以用它來這樣做
typedef struct APOINT{ int x; int y; } POINT;
他就等效為如下圖所示
typedef <---> POINT//表示為struct 結構體類型創造了POINT變量類型
以後就可以這樣
POINT P1 ={1,2};
(4)聯合體數據類型
表示形式:union
舉例:
union POINT{
char i;
int y;
}
共用體聲明後,實質這塊內存的大小是其中包含變量最大的大小,在上述程序中應該是int大小最大,那麼他是四個字節大小
內存中排列是這樣的
i 【 】 ---- ---- ----
y 【 】【 】【 】【 】
//【】代表內存占有 ---- 內存不占有
他們共用一塊內存。
應用:可以利用共用體對長變量進行拆分,拆分成四個char或者二進制進行觀察。