聯(lián)合體嵌套結(jié)構(gòu)體 在c語(yǔ)言編碼中,因?yàn)閷?shí)現(xiàn)需要,大量使用結(jié)構(gòu)體和共用體,這樣有什么弊端嗎?
在c語(yǔ)言編碼中,因?yàn)閷?shí)現(xiàn)需要,大量使用結(jié)構(gòu)體和共用體,這樣有什么弊端嗎?在用C語(yǔ)言設(shè)計(jì)大量參數(shù)和類(lèi)型時(shí),首先要考慮枚舉和結(jié)構(gòu)。Struct使用起來(lái)非常方便。我們要注意申請(qǐng)初始化和發(fā)布。一般來(lái)說(shuō),它與C
在c語(yǔ)言編碼中,因?yàn)閷?shí)現(xiàn)需要,大量使用結(jié)構(gòu)體和共用體,這樣有什么弊端嗎?
在用C語(yǔ)言設(shè)計(jì)大量參數(shù)和類(lèi)型時(shí),首先要考慮枚舉和結(jié)構(gòu)。Struct使用起來(lái)非常方便。我們要注意申請(qǐng)初始化和發(fā)布。一般來(lái)說(shuō),它與C中的基類(lèi)一起使用,速度很快。
共用體和結(jié)構(gòu)體到底怎么去理解?
程序中定義了通用車(chē)身類(lèi)型UN。它的兩個(gè)成員I和C占用相同的內(nèi)存空間。在main()中,變量x由UN定義。X.i表示該區(qū)域中的數(shù)據(jù)按i的類(lèi)型解釋?zhuān)磇nt,而X、C[0]或X.C[1]表示該區(qū)域中的數(shù)據(jù)按字符解釋。事實(shí)上,答案是不確定的,結(jié)果是不同的:(1)假設(shè)系統(tǒng)的int類(lèi)型占用2個(gè)字節(jié),那么變量x所需的內(nèi)存是2個(gè)字節(jié),變量x分配的內(nèi)存空間是x.C[0]=10x.C[1],在2000-2001的程序中=1,將此區(qū)域的內(nèi)容修改為:然后輸出x.i的值,即以int的方式解釋這兩個(gè)字節(jié)中的數(shù)據(jù)。高字節(jié)對(duì)應(yīng)整數(shù)的高位,低字節(jié)對(duì)應(yīng)低位,然后將這兩個(gè)字節(jié)分別轉(zhuǎn)換為00000001和8位二進(jìn)制。假設(shè)系統(tǒng)的int類(lèi)型占用4字節(jié),那么變量x所需的內(nèi)存是4字節(jié)。假設(shè)變量x分配的內(nèi)存空間為2000~2003,在程序中x.C[0]=10x.C[1]=1,該區(qū)域的內(nèi)容修改為:sizeof(Union)Data1)為16。默認(rèn)情況下,Commons的最大基本類(lèi)型是double,它占用8個(gè)字節(jié),因此Commons與8對(duì)齊。字符數(shù)組C2占用9字節(jié),因此整個(gè)公共體應(yīng)該占用9字節(jié),但根據(jù)對(duì)齊原則,實(shí)際分配給它的內(nèi)存是16字節(jié)。Struct:Struct數(shù)據(jù)與8字節(jié)對(duì)齊,long類(lèi)型的成員1分配8字節(jié)。s、 I、C和a最初分別占用4、2、1和10字節(jié)??紤]到對(duì)齊方式,s分配4個(gè)字節(jié),I分配2個(gè)字節(jié),C分配2個(gè)字節(jié)。此時(shí),8個(gè)字節(jié)剛剛用完。最初分配了10個(gè)字節(jié)??紤]到對(duì)齊,整個(gè)結(jié)構(gòu)占用的存儲(chǔ)空間是8的倍數(shù),因此分配了16個(gè)字節(jié)。因此,結(jié)構(gòu)數(shù)據(jù)占用84216=32字節(jié)。