|   結構體  時(shi)間:2018-04-16作者:華清遠見 結構體的概念 結(jie)構體(ti)屬于C數(shu)據(ju)類(lei)型中的構造數(shu)據(ju)類(lei)型(Composite Data Types),在結(jie)構體(ti)中可以包含若干(gan)個不同(tong)數(shu)據(ju)類(lei)型和不同(tong)意義的數(shu)據(ju)項,從(cong)而使這些數(shu)據(ju)項組合起來反映某(mou)一個信息,這些數(shu)據(ju)項稱為結(jie)構體(ti)的成員(yuan)(member)。 舉個例子: 
	 上圖(tu)是模擬(ni)了(le)一(yi)(yi)個(ge)圖(tu)書(shu)(shu)(shu)(shu)(shu)(shu)管理(li)中(zhong)的(de)(de)(de)部(bu)分數據(ju),可(ke)以(yi)很清楚的(de)(de)(de)看到一(yi)(yi)本(ben)書(shu)(shu)(shu)(shu)(shu)(shu)有編號、書(shu)(shu)(shu)(shu)(shu)(shu)名(ming)、作者等許多信息(xi)。如果我(wo)想通(tong)過一(yi)(yi)個(ge)普通(tong)的(de)(de)(de)數據(ju)類型(xing)來完(wan)(wan)整的(de)(de)(de)描(miao)述這本(ben)書(shu)(shu)(shu)(shu)(shu)(shu)肯定是不現實的(de)(de)(de),而結構(gou)體類型(xing)是集(ji)合了(le)多種(zhong)不同的(de)(de)(de)數據(ju)類型(xing),可(ke)以(yi)更加完(wan)(wan)全且方(fang)便的(de)(de)(de)描(miao)述一(yi)(yi)本(ben)書(shu)(shu)(shu)(shu)(shu)(shu),此時結構(gou)體的(de)(de)(de)每(mei)一(yi)(yi)個(ge)成(cheng)員(yuan)分別代表著書(shu)(shu)(shu)(shu)(shu)(shu)的(de)(de)(de)不同的(de)(de)(de)信息(xi)。 結(jie)構(gou)體的(de)聲明及(ji)結(jie)構(gou)體變量的(de)定義(yi) 標準形式: 
	 這里(li)struct為結構體關鍵字,一(yi)般情(qing)況下,結構體名、成員列表和(he)結構體變量名列表這三部分(fen)至(zhi)少要出現2個,以示例解釋: 1. 
	 2. 
	 3. 
	 4.完全形式 
	 5.也可(ke)以通過typedef將結構體(ti)重新定(ding)義 
	 結構體變量的使(shi)用方法 結構體(ti)變量在(zai)使用的過(guo)程(cheng)中應(ying)該(gai)注意以下幾點: 1. 不能將一(yi)個(ge)結構(gou)體類(lei)型變(bian)量作為一(yi)個(ge)整體加以引用(yong),而只(zhi)能對結構(gou)體類(lei)型變(bian)量中的各個(ge)成員分(fen)別(bie)引用(yong)。 2. 使用成(cheng)員(yuan)運算(suan)符(fu)”.”修(xiu)改和引用成(cheng)員(yuan)。 3. 相同(tong)結構(gou)體類型的變量可以(yi)相互賦值。 
	 輸出結果: 
	 結構體(ti)數組的使用(yong)方(fang)法 結構體數組的(de)(de)使用方法就是(shi)普通類(lei)型數組的(de)(de)使用方式與(yu)結構體變(bian)量的(de)(de)使用方式相結合,沒有難度,直接上代(dai)碼: 
	 輸出結果: 
	 結構體指針的使用(yong)方法 結(jie)構(gou)(gou)體指針也(ye)可以直接引用(yong)結(jie)構(gou)(gou)體內的成(cheng)員(yuan),但是格式(shi)與變量引用(yong)不同(tong),不用(yong)”.”而(er)是用(yong)”->”引用(yong)。 
	 輸出結果: 
	 結構體(ti)內的偏移規則 1.每個(ge)成(cheng)員(yuan)(yuan)的偏移量都必須是當前成(cheng)員(yuan)(yuan)所占內存大小的整數倍如(ru)果(guo)不(bu)是編(bian)譯器會(hui)在成(cheng)員(yuan)(yuan)之間加上填充字節。 2.當所有(you)成(cheng)員(yuan)大小(xiao)計算完畢后,編譯(yi)器判斷當前結構(gou)體(ti)(ti)大小(xiao)是否是結構(gou)體(ti)(ti)中最寬的成(cheng)員(yuan)變量大小(xiao)的整數倍,如果不是會在最后一個成(cheng)員(yuan)后做字節填充。 結構體的大小計(ji)算 
	 結構(gou)(gou)體中有(you)一個(ge)(ge)long類型,兩個(ge)(ge)char類型,兩個(ge)(ge)int類型成員(yuan)(yuan),一個(ge)(ge)short類型成員(yuan)(yuan),如(ru)果(guo)只按照(zhao)這幾個(ge)(ge)成員(yuan)(yuan)大(da)小相加,結構(gou)(gou)體大(da)小應(ying)該是 4*3+1*2+2=16 個(ge)(ge)字節大(da)小。但(dan)實際輸出結果(guo)是20個(ge)(ge)字節大(da)小。 下面(mian)來一步(bu)步(bu)分析編譯器是如何計算大小進行分配的。 1、遇到第(di)一個(ge)成員變量a,該成員偏移量為(wei)0,大小為(wei)4,符合偏移規則(ze)第(di)一條(tiao)。 2、接(jie)下來(lai)第二個成員變量(liang)(liang)b,偏移(yi)量(liang)(liang)為(wei)4,大小為(wei)1,符(fu)合偏移(yi)規則第一條(tiao)。 3、成員變量c,偏移(yi)量為(wei)5,大(da)小(xiao)為(wei)4,不符合(he)偏移(yi)規(gui)則第一條。在成員b和c之間(jian)填充三個字節,此時(shi),偏移(yi)量大(da)小(xiao)為(wei)8,符合(he)偏移(yi)規(gui)則第一條,繼續往下(xia)。 4、成員(yuan)變量(liang)d,偏移量(liang)為12,大(da)小為4,符合偏移規則第(di)一條,繼續往(wang)下。 5、成員變量e,偏移(yi)(yi)量為16,大(da)小為1,符合偏移(yi)(yi)規則第一條。 6、成(cheng)員變量f,偏(pian)移量為(wei)17,大(da)小(xiao)為(wei)2,不符合偏(pian)移規(gui)則第一條,在成(cheng)員e和f之間填(tian)充1個(ge)字節,此(ci)時,偏(pian)移量大(da)小(xiao)為(wei)18,最終(zhong)大(da)小(xiao)20個(ge)字節 相關資訊 發表評論 | 
全國咨詢電話:400-611-6270,雙休日及節假日請致電值班手機:15010390966
在線(xian)咨詢: 曹老師(shi)QQ(3337544669), 徐老師(shi)QQ(1462495461), 劉老師(shi) QQ(3108687497)
企業培訓洽談(tan)專(zhuan)線(xian):010-82600901,院(yuan)校合作(zuo)洽談(tan)專(zhuan)線(xian):010-82600350,在(zai)線(xian)咨詢:QQ(248856300)
Copyright 2004-2018 華清遠見教育科技集團 版權所有(you) ,京ICP備(bei)(bei)16055225號,京公海(hai)網(wang)安備(bei)(bei)11010802025203號