D语言 - 联合(Unions)

D语言 - 联合(Unions) 首页 / D语言入门教程 / 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 的值已变更,因为分配给变量的最终值已占用内存位置。

链接:https://www.learnfk.comhttps://www.learnfk.com/d-programming/d-programming-unions.html

来源:LearnFk无涯教程网

现在让我们再次查看同一示例,其中一次将使用一个变量,这是拥有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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

Go语言从入门到实战 -〔蔡超〕

Java性能调优实战 -〔刘超〕

接口测试入门课 -〔陈磊〕

成为AI产品经理 -〔刘海丰〕

玩转Vue 3全家桶 -〔大圣〕

自动化测试高手课 -〔柳胜〕

人人都用得上的数字化思维课 -〔付晓岩〕

JavaScript进阶实战课 -〔石川〕

AI大模型企业应用实战 -〔蔡超〕

好记忆不如烂笔头。留下您的足迹吧 :)