在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ C++/ D語言聯(lián)合體
類的訪問修飾符
D語言運(yùn)算符
D語言邏輯運(yùn)算符
類指針
D語言元組
D語言指針
D語言模塊
D語言sizeof運(yùn)算符
D語言混合類型
D語言封裝
D語言條件編譯
類的靜態(tài)成員
D語言do...while循環(huán)
D語言結(jié)構(gòu)體
重載
D語言字符串-String
D語言決策語句
D語言接口
D語言for循環(huán)
D語言switch語句
D語言關(guān)聯(lián)數(shù)組
D語言范圍
D語言枚舉Enums
契約式編程
D語言并發(fā)
D語言開發(fā)環(huán)境設(shè)置
D語言別名
D語言常值
D語言常量
D語言函數(shù)
D語言if嵌套語句
D語言循環(huán)
D語言概述,D語言是什么?
D語言運(yùn)算符優(yōu)先級
D語言continue語句
D語言異常處理
D語言break語句
D語言if...else語句
D語言類和對象
類繼承
D語言字符
D語言教程
D語言關(guān)系運(yùn)算符
比較操作符重載
構(gòu)造函數(shù)和析構(gòu)函數(shù)
D語言抽象類
D語言if語句
D語言賦值運(yùn)算符
D中算術(shù)運(yùn)算符
D語言類成員函數(shù)
D語言位運(yùn)算符
D語言變量
D語言數(shù)據(jù)類型
D語言文件I/O
D語言數(shù)組
一元運(yùn)算符重載
D語言嵌套switch語句
D語言基本語法
二元運(yùn)算符重載
this指針
D語言聯(lián)合體
D語言模板
D語言嵌套循環(huán)
D語言while循環(huán)

D語言聯(lián)合體

聯(lián)合體在D提供一個(gè)特殊的數(shù)據(jù)類型,能夠存儲不同的數(shù)據(jù)類型相同的內(nèi)存位置??梢远x一個(gè)聯(lián)合體函有許多成員,但只有一個(gè)成員可以在任何給定的時(shí)間包含一個(gè)值。聯(lián)合體提供使用相同的存儲器位置為多用途的有效方式。

定義一個(gè)聯(lián)合體

要定義聯(lián)合體,必須使用union語句,非常相似于定義結(jié)構(gòu)體中所做的。 UNION語句定義了一個(gè)新的數(shù)據(jù)類型,為項(xiàng)目不止一個(gè)成員。聯(lián)合體聲明的格式如下:

union [union tag]
{
   member definition;
   member definition;
   ...
   member definition;
} [one or more union variables];  

union標(biāo)簽是可選的,并且每個(gè)成員的定義是正常的變量定義,比如int i; or float f;或任何其他有效的變量定義。在聯(lián)合體的定義的結(jié)尾,最后的分號之前,可以指定一個(gè)或多個(gè)聯(lián)合體變量,但它是可選的。這里將定義名為Data聯(lián)合類型,它有三個(gè)成員 i, f, 和str:

union Data
{
   int i;
   float f;
   char  str[20];
} data;  

現(xiàn)在,數(shù)據(jù)類型的變量可以存儲整數(shù),浮點(diǎn)數(shù),或字符的字符串。這意味著單個(gè)變量;即,相同的存儲單元可用于存儲多個(gè)類型的數(shù)據(jù)??梢愿鶕?jù)需要使用聯(lián)合體內(nèi)的任何內(nèi)置或用戶定義的數(shù)據(jù)類型。

聯(lián)合體所占用的內(nèi)存將大到足以容納聯(lián)合體中最大的成員。例如,在上面的例子中的數(shù)據(jù)類型將占用20個(gè)字節(jié)的存儲空間,因?yàn)檫@是一個(gè)可以由文字串所占用的最大空間。以下是這將顯示由上述聯(lián)合體總占用內(nèi)存大小的例子:

import std.stdio;
 
union Data
{
   int i;
   float f;
   char  str[20];
};
 
int main( )
{
   Data data;        

   writeln( "Memory size occupied by data : ", data.sizeof);

   return 0;
}

當(dāng)上面的代碼被編譯并執(zhí)行,它會產(chǎn)生以下結(jié)果:

Memory size occupied by data : 20

訪問聯(lián)合體成員

要訪問一個(gè)聯(lián)合體的任何成員,我們使用成員訪問運(yùn)算符(.)成員訪問運(yùn)算編碼為聯(lián)合體變量名和成員,使用union關(guān)鍵字來定義聯(lián)合體類型的變量。下面是例子來解釋聯(lián)合體的用法:

import std.stdio;

union Data
{
   int i;
   float f;
   char  str[13];
};

void main( )
{
   Data data;

   data.i = 10;
   data.f = 220.5;
   data.str = "D Programming".dup;
   writeln( "size of : ", data.sizeof);
   writeln( "data.i : ", data.i);
   writeln( "data.f : ", data.f);
   writeln( "data.str : ", data.str);
}

當(dāng)上面的代碼被編譯并執(zhí)行,它會產(chǎn)生以下結(jié)果:

size of : 16
data.i : 1917853764
data.f : 4.12236e+30
data.str : D Programming

在這里,我們可以看到, i 和聯(lián)合體f的成員值被損壞了,因?yàn)榉峙浣o該變量的最終值已經(jīng)占據(jù)了存儲位置,這是該值如果str成員能很好的打印?,F(xiàn)在,讓我們看看同樣的例子再一次在這里我們將使用一個(gè)變量時(shí),它是具有聯(lián)合體的主要目的:

import std.stdio;

union Data
{
   int i;
   float f;
   char  str[13];
};

void main( )
{
   Data data;
   writeln( "size of : ", data.sizeof);

   data.i = 10;
   writeln( "data.i : ", data.i);

   data.f = 220.5;
   writeln( "data.f : ", data.f);

   data.str = "D Programming".dup;
   writeln( "data.str : ", data.str);
}

當(dāng)上面的代碼被編譯并執(zhí)行,它會產(chǎn)生以下結(jié)果:

size of : 16
data.i : 10
data.f : 220.5
data.str : D Programming

在這里,所有的成員都得到非常好打印,因?yàn)橐粋€(gè)成員只在一個(gè)時(shí)間使用。