1. 主页
  2. 文档
  3. C语言教程
  4. C语言枚举、结构和联合
  5. C中的匿名联合和结构

C中的匿名联合和结构

在C 的C11标准中,添加了匿名联合和结构。 
匿名联合/结构也称为未命名联合/结构,因为它们没有名称。由于没有名称,因此不会创建它们的直接对象(或变量),我们在嵌套结构或联合中使用它们。 
定义就像没有名称或标签的普通联合。例如, 

// Anonymous union example
union 
{
char alpha;
int num;
};
// Anonymous structure example
struct 
{
char alpha;
int num;
};

由于没有变量,没有名称,我们可以直接访问成员。此可访问性仅在定义匿名联合的范围内有效。 
以下是匿名联合的完整工作示例。

// C Program to demonstrate working of anonymous union
#include <stdio.h>
struct Scope {
// Anonymous union
union {
char alpha;
int num;
};
};

int main()
{
struct Scope x, y;
x.num = 65;
y.alpha = 'A';

// Note that members of union are accessed directly
printf("y.alpha = %c, x.num = %d", y.alpha, x.num);

return 0;
}

请记住,我们一次只能访问union的一名成员。如果分配了另一个成员,则前一个成员将从union中消失。

输出

x.alpha = A,x.num = 65
// C Program to demonstrate working of anonymous struct
#include<stdio.h>
struct Scope
{
// Anonymous structure
struct
{
char alpha;
int num;
};
};

int main()
{
struct Scope x;
x.num = 65;
x.alpha = 'B';

// Note that members of structure are accessed directly
printf("x.alpha = %c, x.num = %d", x.alpha, x.num);

return 0;
}
输出

x.alpha = B,x.num = 65

C++呢?
匿名联合和结构不是 C++ 11 标准的一部分,但大多数 C++ 编译器都支持它们。由于这是 C 独有的功能,因此 C++ 实现不允许匿名结构/联合具有私有或受保护成员、静态成员和函数。  

这篇文章对您有用吗?