先看一下C語言數(shù)據(jù)類型簡圖包帚,上一篇我們也見過了。
上一篇數(shù)據(jù)類型我們講了基本類型狐血,今天我們接著說構(gòu)造數(shù)據(jù)類型全谤。
構(gòu)造數(shù)據(jù)類型
是在基本數(shù)據(jù)類型的基礎(chǔ)上進(jìn)行構(gòu)造而形成的一類復(fù)合數(shù)據(jù)類型吊履,它可以用于表示更為復(fù)雜的數(shù)據(jù)安皱。
1调鬓、數(shù)組:
? ? ? ? 數(shù)組是有一定順序關(guān)系的若干變量的一個(gè)集合艇炎,其中每一個(gè)變量我們稱為數(shù)組的元素,分為一維數(shù)組腾窝、多維數(shù)組缀踪。一維數(shù)組有一個(gè)下標(biāo)就能確定位置。多維數(shù)組元素有多個(gè)下標(biāo)虹脯,以標(biāo)識(shí)它在數(shù)組中的位置驴娃。
一維數(shù)組:
定義:<數(shù)據(jù)類型> <數(shù)組名> < [] > ?例:int ?i [10];?
初始化方法有幾種:1、普通局部數(shù)組沒有初始化循集,則數(shù)組中元素的值唇敞,是不確定的。全局?jǐn)?shù)組沒有初始化默認(rèn)為0咒彤。
2疆柔、全部初始化,給每一位元素寫值镶柱,例:int ?i [5]={1,2,3,4,5};還可以寫成?int ?i []={1,2,3,4,5};兩種寫法都是5個(gè)元素旷档。
3、局部初始化歇拆,只給數(shù)組里前幾位初始化鞋屈,不完全初始化,余下的就會(huì)默認(rèn)為0故觅。例:int ?i [5]={0};剩下的4位默認(rèn)為0厂庇。int ?i [5]={1,2}; 剩下的3位都為0。
二維數(shù)組:多維數(shù)組要多個(gè)下標(biāo)输吏,二維數(shù)組有兩個(gè)下標(biāo)权旷,才能確定位置。
定義: <數(shù)據(jù)類型> <數(shù)組名> < [] >< [] > ?例:int ?i [5][10]; 可以看成是5個(gè)一維數(shù)組评也,每個(gè)一維數(shù)組10個(gè)元素炼杖。
初始化方式:1灭返、全部初始化,例:int ?i [2][3]={ {1,2,3},{1,2,3} };{}里有兩個(gè)一維數(shù)組坤邪。給每個(gè)元素賦值熙含。還可以寫成?int ?i [][3]={ {1,2,3},{1,2,3} };
2、部分初始化:int ?i [2][3]={ {1},{1} };給個(gè)每個(gè)給前面1個(gè)(或多個(gè))元素賦值艇纺,第一個(gè)一維剩下的3個(gè)元素默認(rèn)為0怎静,第二個(gè)也是。
2黔衡、線性賦值蚓聘,例:int ?i [2][3]={1,2,3,1,2,3}; 這里數(shù)組共有6個(gè)元素,里面不用{}分開盟劫,直接給每位元素賦值夜牡。
3、線性部分初始化侣签,例:int ?i [2][3]={1,2} ; 剩下的4位元素都默認(rèn)為0塘装。
2、結(jié)構(gòu)體:
結(jié)構(gòu)體是用戶自定義的新數(shù)據(jù)類型影所,在結(jié)構(gòu)體中可以包含若干個(gè)不同數(shù)據(jù)類型和不同意義的數(shù)據(jù)項(xiàng)
結(jié)構(gòu)體的作用:為了處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)等)提供了有效的手段蹦肴,而且,它們?yōu)楹瘮?shù)間傳遞不同類型的數(shù)據(jù)提供了方便猴娩。
定義:??struct?結(jié)構(gòu)體名? {
?????? 數(shù)據(jù)類型 成員名1阴幌;
? ? ? ?數(shù)據(jù)類型 成員名2;......
?????? 數(shù)據(jù)類型 成員名n卷中;
??? }矛双;
struct 結(jié)構(gòu)體名 結(jié)構(gòu)體變量名;
例:struct Person? {
??????? char array[20];
??????? char *name;
??????? int age;
??? };
??? struct Person p;
還有2種定義方法:1、在后面定義結(jié)構(gòu)體變量:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2仓坞、省略結(jié)構(gòu)體名:
結(jié)構(gòu)體使用:結(jié)構(gòu)體變量 ” . “ 結(jié)構(gòu)體成員背零,上圖為例:per.age=20; 這里把結(jié)構(gòu)體 per 的成員age 賦值。
3无埃、共用體:
不同數(shù)據(jù)類型的數(shù)據(jù)可以使用共同的存儲(chǔ)區(qū)域徙瓶,這種數(shù)據(jù)構(gòu)造類型稱為共用體,簡稱共用嫉称,又稱聯(lián)合體侦镇。共用體在定義、說明和使用形式上與結(jié)構(gòu)體相似织阅。兩者本質(zhì)上的不同僅在于使用內(nèi)存的方式上壳繁。
定義:union共用體名{
? ? ? ????????? 成員表列;
????????????};
例:union gy?{
????????????? char c;
????????????? int ?i;
? ? ? ? ?};
使用:?union gy ?t; ?t.i=97; ?這里把97賦值給共用體t 闹炉,t的成員c 蒿赢、i 都=97(97是A的ASCll 碼)。
采用小端儲(chǔ)存方式渣触,數(shù)據(jù)低位儲(chǔ)存在低地址羡棵。
共用體和結(jié)構(gòu)體的區(qū)別:
共用體各個(gè)成員的起始地址是相同的,且整個(gè)聯(lián)合體占用的存儲(chǔ)空間以長度最大的成員為準(zhǔn)嗅钻。只有一個(gè)地址皂冰。只能有一個(gè)值。
結(jié)構(gòu)體每個(gè)成員的地址不同养篓,有多個(gè)地址秃流。每個(gè)成員可以有不同的值。
空類型:中文翻譯為“無類型”柳弄。常用在程序編寫中對(duì)定義函數(shù)的參數(shù)類型舶胀、返回值、函數(shù)中指針類型進(jìn)行聲明语御。void的字面意思是“無類型”峻贮,void *則為“無類型指針”,void *可以指向任何類型的數(shù)據(jù)