2--資料型別2(構造資料型別)
先看一下C語言資料型別簡圖,上一篇我們也見過了。

上一篇資料型別我們講了基本型別,今天我們接著說構造資料型別。
構造資料型別
是在基本資料型別的基礎上進行構造而形成的一類複合資料型別,它可以用於表示更為複雜的資料。
1、陣列:
陣列是有一定順序關係的若干變數的一個集合,其中每一個變數我們稱為陣列的元素,分為一維陣列、多維陣列。一維陣列有一個下標就能確定位置。多維陣列元素有多個下標,以標識它在陣列中的位置。
一維陣列:
定義:<資料型別> <陣列名> < [] > 例:int i [10];
初始化方法有幾種:1、普通區域性陣列沒有初始化,則陣列中元素的值,是不確定的。全域性陣列沒有初始化預設為0。
2、全部初始化,給每一位元素寫值,例:int i [5]={1,2,3,4,5};還可以寫成 int i []={1,2,3,4,5};兩種寫法都是5個元素。
3、區域性初始化,只給數組裡前幾位初始化,不完全初始化,餘下的就會預設為0。例:int i [5]={0};剩下的4位預設為0。int i [5]={1,2}; 剩下的3位都為0。
二維陣列: 多維陣列要多個下標,二維陣列有兩個下標,才能確定位置。
定義: <資料型別> <陣列名> < [] >< [] > 例:int i [5][10]; 可以看成是5個一維陣列,每個一維陣列10個元素。
初始化方式:1、全部初始化,例:int i [2][3]={ {1,2,3},{1,2,3} };{}裡有兩個一維陣列。給每個元素賦值。還可以寫成 int i [][3]={ {1,2,3},{1,2,3} };
2、部分初始化:int i [2][3]={ {1},{1} };給個每個給前面1個(或多個)元素賦值,第一個一維剩下的3個元素預設為0,第二個也是。
2、線性賦值,例:int i [2][3]={1,2,3,1,2,3}; 這裡陣列共有6個元素,裡面不用{}分開,直接給每位元素賦值。
3、線性部分初始化,例:int i [2][3]={1,2} ; 剩下的4位元素都預設為0。
2、結構體:
結構體是使用者自定義的新資料型別,在結構體中可以包含若干個不同資料型別和不同意義的資料項
結構體的作用:為了處理複雜的資料結構(如動態資料結構等)提供了有效的手段,而且,它們為函式間傳遞不同型別的資料提供了方便。
定義: struct 結構體名 {
資料型別 成員名1;
資料型別 成員名2;......
資料型別 成員名n;
};
struct 結構體名 結構體變數名;
例:struct Person {
char array[20];
char *name;
int age;
};
struct Person p;
還有2種定義方法:1、在後面定義結構體變數:

2、省略結構體名:

結構體使用:結構體變數 ” . “ 結構體成員,上圖為例:per.age=20; 這裡把結構體 per 的成員age 賦值。
3、共用體:
不同資料型別的資料可以使用共同的儲存區域,這種資料構造型別稱為共用體,簡稱共用,又稱聯合體。共用體在定義、說明和使用形式上與結構體相似。兩者本質上的不同僅在於使用記憶體的方式上。
定義:union共用體名{
成員表列;
};
例:union gy {
char c;
int i;
};
使用: union gy t; t.i=97; 這裡把97賦值給共用體t ,t的成員c 、i 都=97(97是A的ASCll 碼)。
採用小端儲存方式,資料低位儲存在低地址。
共用體和結構體的區別:
共用體 各個成員的起始地址是相同的,且整個聯合體佔用的儲存空間以長度最大的成員為準。只有一個地址。只能有一個值。
結構體 每個成員的地址不同,有多個地址。每個成員可以有不同的值。
空型別: 中文翻譯為“無型別”。常用在程式編寫中對定義函式的引數型別、返回值、函式中 指標 型別進行宣告。void的字面意思是“無型別”,void *則為“無型別指標”,void *可以指向任何型別的資料