📜  C语言中的匿名联合与结构

📅  最后修改于: 2021-05-25 19:02:05             🧑  作者: Mango

在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基础课程》。