python中有什麼可以代替c語言中的共用體的

2021-08-21 01:57:32 字數 3408 閱讀 6818

1樓:

寫個類模擬吧

class uniontype:

def__init__(self,d):

self.data=d #位元組陣列,對應c的實際資料或指標資料def geta(self) #獲取公用體的屬性a#從self.data中獲取一段,轉換成需要的int或者string返回

def seta(self, a)#賦值,賦予公用體的屬性a的值#先把a轉換成bytes位元組陣列,再複製到self.data上的指定段

def getb(self)

def setb(self, b)

def getc(self)

def setc(self, c)

這樣,實際資料以bytearray位元組陣列儲存,用物件方法轉換來存取,實現一個

union uniontype;

的共用體

c語言中的共用體是什麼?

2樓:四舍**入

共用體一般指聯合體,作用如下:

1、節省記憶體

有兩個很長的資料結構,不會同時使用,用結構體的話,只佔用最長的那個資料結構所佔用的空間,就足夠了。

2、做某些轉換用

union;

x=20.8;

3樓:楊塵一

在進行某些演算法的c語言程式設計的時候,需要使幾種不同型別的變數存放到同一段記憶體單元中。也就是使用覆蓋技術,幾個變數互相覆蓋。這種幾個不同的變數共同佔用一段記憶體的結構,在c語言中,被稱作「共用體」型別結構,簡稱共用體。

注:在某些書籍中可能稱之為「聯合體」,但是「共用體」更能反映該型別在記憶體的特點。

共用體型別資料的特點

1.同一個記憶體段可以用來存放幾種不同型別的成員,但是在每一瞬間只能存放其中的一種,而不是同時存放幾種。換句話說,每一瞬間只有一個成員起作用,其他的成員不起作用,即不是同時都在存在和起作用。

2.共用體變數中起作用的成員是最後一次存放的成員,在存入一個新成員後,原有成員就失去作用。

3.共用體變數的地址和它的各成員的地址都是同一地址。

4.不能對共用體變數名賦值,也不能企圖引用變數名來得到一個值。

5.共用體型別可以出現在結構體型別的定義中,也可以定義共用體陣列。反之,結構體也可以出現在共用體型別的定義中,陣列也可以作為共用體的成員。

4樓:google也知道

所謂共用體型別是指將不同的資料項組織成一個整體,它們在記憶體中佔用同一段儲存單元。其定義形式為:

union 共用體名

;union data

obj;

該形式定義了一個共用體資料型別union data ,定義了共用體資料型別變數obj。共用體資料型別與結構體在形式上非常相似,但其表示的含義及儲存是完全不同的。先讓我們看一個小例子。

union data /*共用體*/

mm;struct stud /*結構體* /

;main( )

執行程式輸出:

15,8

程式的輸出說明結構體型別所佔的記憶體空間為其各成員所佔儲存空間之和。而形同結構體的共用體型別實際佔用儲存空間為其最長的成員所佔的儲存空間。

對共用體的成員的引用與結構體成員的引用相同。但由於共用體各成員共用同一段記憶體空間,使用時,根據需要使用其中的某一個成員。從圖中特別說明了共用體的特點,方便程式設計人員在同一記憶體區對不同資料型別的交替使用,增加靈活性,節省記憶體。

可以引用共用體變數的成員,其用法與結構體完全相同。若定義共用體型別為:

union data /*共用體*/

mm;其成員引用為:mm.a,mm.b,mm.c,mm.d 但是要注意的是,不能同時引用四個成員,在某一時刻,只能使用其中之一的成員。

main( )

mm;mm.a=6;

printf("%d\n",mm.a);

mm.c=67.2;

printf("%5.1lf\n", mm.c);

mm.d='w';

mm.b=34.2;

printf("%5.1f,%c\n",mm.b,mm.d);

}執行程式輸出為:

66 7.2

3 4.2,=

程式最後一行的輸出是我們無法預料的。其原因是連續做mm.d='w';mm.

b=34.2;兩個連續的賦值語句最終使共用體變數的成員mm.b所佔四位元組被寫入34.

2,而寫入的字元被覆蓋了,輸出的字元變成了符號「 =」。事實上,字元的輸出是無法得知的,由寫入記憶體的資料決定。

例子雖然很簡單,但卻說明了共用體變數的正確用法。

5樓:淡若親風

共同體是指成員共同使用一段儲存區域,共同體佔用記憶體大小決定於所佔記憶體最大的那個成員,但是實際使用的記憶體會小於等於共同體所佔記憶體大小

6樓:

union

例如定義一個union

union s_un;

s_un s;

你可以用s.s_un_b, s.s_un_w, s_addr訪問實際上訪問的是同一塊記憶體區域,但由於資料型別不同,所以得到的結果可能不一樣。

修改其中一個資料,其他的資料都可能會改變。

union所佔的記憶體大小有最大的那個資料型別決定。

7樓:守望流逝的青春

struct ???

在c語言裡面,共用體和結構體的區別?

8樓:匿名使用者

結構體與共來用體

1.結構源體(struct)

定義:結構體是由一系列具有相同資料型別或不同資料型別的資料構成的資料集合。

例子:struct student

;2.共用體(union)

定義:union維護足夠的空間來放置多個資料成員中的「一種」,而不是為每一個資料成員配置 空 間,

在union中所有的資料成員公用一個空間,同一時間只能儲存其中的一個資料成員,所有的成員具有相同的起始地址。

例子:union data

大小為4個位元組。

可見二者最大的區別就是所佔用的記憶體,一個是分量記憶體之和,另外一個是等於最大的分量的記憶體。

9樓:匿名使用者

共用體所佔的記憶體是這個共用體中最大佔用記憶體的那一個,而結構體是所有成員所佔的記憶體總和

10樓:匿名使用者

一句話 結構體在沒呼叫它的時候不佔記憶體

共用體佔

11樓:牧赫班經亙

結構體(structure)是一個抄或多個相同資料bai類du型或不同資料型別

的變數集合在一個zhi名稱下的使用者自定義資料型別dao共用體是在同一儲存空間上存不同型別的資料,用於節省空間而c語言中的函式和高中數學的函式是不同的,數學中的函式是一個具體的解析表示式;而c語言中的函式是實現某一功能的一段**

什麼可以代替錫紙,什麼東西可以代替錫紙

1 鋁箔紙可以代替錫紙,現在已經大量代用。2 金箔也可以代替錫紙。最初的錫紙真的是錫造的,錫紙是比鋁箔軟的,包裹食物多少會帶點錫味,同時錫紙因其熔點較低不可加熱,現在所說的錫紙大多為鋁箔紙。錫紙主要用於燒烤,電發,吸油等等。最初的錫紙是錫造的,錫紙比鋁箔軟,包裹食物多少會帶點錫味,但是錫紙因其熔點較...

什麼可以代替鞋油,什麼東西可以代替鞋油,擦皮鞋找不到鞋油

以下東西可以代替鞋油 1 香蕉皮 香蕉皮含有單寧,用來擦試皮鞋 或皮包 上的油汙,可使皮面潔淨如新。須注意的是 用香蕉皮擦皮包皮鞋時,不能用過熟的香蕉皮,應該用青一點的香蕉皮。2 過期的牛奶 將喝剩下的牛奶或已陳腐了的牛奶擦皮鞋可以防止皮面乾裂。清除鞋面上的汙垢,用鞋刷子,把鞋刷一遍。刷好後放在一邊...

什麼食物可以代替牛奶,吃什麼東西可以代替牛奶

蘋果牛奶 法 用蘋果和牛奶代替主食的 方法 空腹也可以喝牛奶,並不影響牛奶的本身效果,但是注意加熱!豆類,牛奶主要補充蛋白質,豆類食品含豐富的蛋白質 有很多,看你想吃什麼唄,酸奶 吃什麼東西可以代替牛奶 如果不喝牛奶,可以用什麼代替?牛奶是還有的豐富的蛋白質粉,所以呢,吃這些高蛋白的東西完全可以替代...