聯(lián)合體union C語言中聯(lián)合體(union)的使用?
C語言中聯(lián)合體(union)的使用?//C語言有并集。下面是一個(gè)使用Union的小例子。#包括(&L)。H>intmain(){inta=1chastr[]=“這是一個(gè)字符串!“unionitor
C語言中聯(lián)合體(union)的使用?
//C語言有并集。下面是一個(gè)使用Union的小例子。#包括(&L)。H>intmain(){inta=1chastr[]=“這是一個(gè)字符串!“unionitorpointer{intnchar*Pt}unionitorpointerv1v1。N=aprintf(%dN“,v1。N) 第1版。Pt=strprintf(%sn“,v1。PT)返回0}
1。聯(lián)合的大小是在其成員中占用最大內(nèi)存的數(shù)據(jù)的大小。
2. 所有成員占用相同的內(nèi)存區(qū)域。All=123456;4個(gè)字節(jié),B[3]是第三個(gè)字節(jié)。例如:a=10;二進(jìn)制代碼a=1000000000000001010;B[0]=(從右到左的第一個(gè)字節(jié),其二進(jìn)制代碼為00001010);B[1]=00000000等,但前提是如何安排系統(tǒng)內(nèi)存,分為大端和小端。(小端低地址,高端高地址)我的意思是小端,通常是小端。
聯(lián)合體union的用法?
都不是。
你必須從記憶的角度來理解它。
例如,一個(gè)int和一個(gè)char[4],如果它是內(nèi)存中的
struct{
int a
char[4]b
}],它是這樣的
[a][b[3]b[2]b[1]b[0
]并集將使之成為這樣的
[a
][b[3]b[2]b[1]b[0
]例如,Base64編碼是將三個(gè)8位數(shù)據(jù)轉(zhuǎn)換成四個(gè)6位數(shù)據(jù),然后進(jìn)行相應(yīng)的編碼。
這樣的操作會(huì)有跨界問題。如果是char,則有8位。這顯然是有點(diǎn)復(fù)雜的位操作。然后我們使用上面的公共體為B[2]B[1]B[0]賦值,然后操作a移位。這是簡單而有效的。
關(guān)于內(nèi)存節(jié)省的理論,主要是指一些數(shù)據(jù)不會(huì)同時(shí)存在。例如,如果老師沒有成績,學(xué)生沒有工資,那么成績和工資就不會(huì)同時(shí)存在。它們都由一個(gè)共同的float體表示,但在實(shí)際使用中只有一個(gè)可以訪問。
對(duì)于初始化問題,在windows中,通常使用ZeroMemory(memset函數(shù)的宏定義)清除內(nèi)存區(qū)域。
共享體有內(nèi)存對(duì)齊問題,這是對(duì)自己感興趣的搜索相關(guān)信息