在嵌套结构中声明内部结构变量而不引用外部结构



我正在创建一个简单的嵌套结构,以了解它的功能过程。下面是示例:

struct Employee
{
   char ename[20];
   int ssn;
   float salary;
   struct date
       {
       int date;
       int month;
       int year; 
       }doj;
}emp1;
这里的

如果我想访问内部结构的成员我需要像

这样做
emp1.doj.date = 10;

但是在上面的结构中,如果我省略了结构date(即doj)的变量声明,并尝试单独声明,则不需要引用emp1

struct date doj;

在这种情况下编译器没有给出任何错误。我还可以访问结构date的成员,而不需要像

那样引用emp1。
doj.date =15;

我只是想知道这怎么可能?

C中内部结构没有特殊的作用域规则,即struct date的作用域与struct Employee的作用域相同。在任何可以声明外部结构类型对象的地方,都可以自由地声明内部结构类型的对象。

例如,这些声明与您的声明相同:

struct date
{
    int date;
    int month;
    int year; 
};
struct Employee
{
   char ename[20];
   int ssn;
   float salary;
   struct date doj;
}emp1;

C没有名称空间(或者正确地说,特殊的作用域规则)。所以你的内部结构也可以在外部结构之外定义

struct Outer {
 struct Inner {} inner;
};
// same as
struct Inner {};
struct Outer {
 struct Inner inner;
};

当你"访问"内部结构的成员时,你是在访问另一个实例的成员。

最新更新