在C的C11标准中,添加了匿名联合和结构。
匿名联合/结构也被称为未命名的联合/结构,因为它们没有名称。由于没有名称,因此不会创建它们的直接对象(或变量),因此我们在嵌套结构或联合中使用它们。
定义就像没有名称或标记的普通联合的定义一样。例如,
// Anonymous union example
union
{
char alpha;
int num;
};
// Anonymous structure example
struct
{
char alpha;
int num;
};
由于没有变量也没有名称,因此我们可以直接访问成员。此可访问性仅在定义匿名联合的范围内有效。
以下是匿名联合的完整工作示例。
C
// C Program to demonstrate working of anonymous union
#include
struct Scope {
// Anonymous union
union {
char alpha;
int num;
};
};
int main()
{
struct Scope x;
x.num = 65;
x.alpha = 'A';
// Note that members of union are accessed directly
printf("x.alpha = %c, x.num = %d", x.alpha, x.num);
return 0;
}
C
// C Program to demonstrate working of anonymous struct
#include
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 = A, x.num = 65
C
// C Program to demonstrate working of anonymous struct
#include
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++实现不允许匿名struct / un具有私有或受保护的成员,静态成员和函数。
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。