codecamp

D编程 联合(Unions)

union 是特殊数据类型,可以将不同的数据类型存储在同一存储位置。

定义Union

要定义Union,您必须以与定义结构相似的方式使用并集union语句。

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

union标签tag是可选的,每个成员定义都是一个普通变量定义,如int i;或浮动f;在并集union定义的末尾,在最后一个分号之前,您可以指定一个或多个并集变量,但这是可选的。这是定义名为Data的联合类型的方法,该类型具有三个成员 i , f 和 str -

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

Data 类型的变量可以存储整数,浮点数或字符串,这意味着可以使用一个变量来存储多种类型的数据。

 
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; 
}

编译并执行上述代码后,将产生以下输出-

Memory size occupied by data : 20 

访问方法

您将使用union关键字定义union类型的变量。

以下示例说明了union的用法-

 
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); 
}

编译并执行上述代码后,将产生以下输出-

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

在这里,您可以看到工会的 i 和 f 的值已变更,因为分配给变量的最终值已占用内存位置。

现在让我们再次查看同一示例,其中一次将使用一个变量,这是拥有Union的主要目的-

 
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); 
}

编译并执行上述代码后,将产生以下输出-

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


D编程 结构(Structs)
D编程 范围(Ranges)
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }