21xrx.com
2025-03-31 06:36:00 Monday
文章检索 我的文章 写文章
C++中的Union用法
2023-07-10 13:24:44 深夜i     11     0
C++ Union 用法

在C++编程中,Union是一种特殊的数据类型,它允许程序员定义一个包含多个成员变量的结构体,但只能同时访问其中一个成员变量。它的基本用法是将几个不同类型的变量存储在同一内存区域中,这样可以节省内存并提高程序的效率。本文将介绍C++中Union的用法。

定义Union

使用Union的第一步是定义一个Union变量,可以像定义结构体一样定义Union变量。 但是,Union变量与结构体有所不同的是,只有一个成员变量可以被访问。以下是一个简单的Union定义示例:

union SampleUnion {
  int num;
  float fnum;
  char str[20];
};

上述代码定义了一个包含三个成员的Union变量,其中num和fnum都是基本数据类型,而str是一个字符数组。在此定义中,Union的大小等于最大成员的大小,因此,此Union的大小为20字节。

访问Union成员

为了访问Union成员,可以使用点号或箭头运算符来访问Union成员。但要注意的是,只有一个成员可以被访问。以下是一个示例:

union SampleUnion {
  int num;
  float fnum;
  char str[20];
};
int main() {
  SampleUnion u;
  u.num = 20;
  std::cout<<"Num: "<<u.num<<std::endl;
  u.fnum = 12.5;
  std::cout<<"Fnum: "<<u.fnum<<std::endl;
  strcpy(u.str, "Hello World");
  std::cout<<"Str: "<<u.str<<std::endl;
  return 0;
}

在上面的代码中,通过“SampleUnion u”定义了一个Union变量,并对num、fnum和str分别赋值,最后通过cout输出结果。由于Union的特殊性,输出的结果只有最后一个被设置的成员才能够访问。

使用Union数组

Union数组是一组Union类型的变量。可以使用结构或Union的类型定义一个数组,但是在数组中,对于Union类型的变量,只有一种类型的变量可以被访问。

以下是Union数组的示例:

union ExampleUnion {
  int num;
  float fnum;
  char str[20];
};
int main() {
  ExampleUnion u[3];
  u[0].num = 10;
  u[1].fnum = 20.5;
  strcpy(u[2].str,"Hello C++");
  for(int i = 0; i < 3; i++){
    std::cout<<i<<" - Num: "<<u[i].num<<" - Fnum: "<<u[i].fnum<<" - Str: "<<u[i].str<<std::endl;
  }
  return 0;
}

总结

在C++中,使用Union能够大大减少内存开销,提高程序的效率。但要注意的是,只有对于设置的一个成员变量才能够访问,而使用其他成员变量则是不安全的。因此,在使用Union时,需要格外小心,确保程序的正确性。

  
  

评论区