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

时间:2015-07-11 08:20:49

标签: c struct

我正在创建一个简单的嵌套结构,以了解它正在运行的进程。以下是示例:

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

在这种情况下,如果我想访问内部结构的成员,我需要做类似

的事情
emp1.doj.date = 10;

但在上述结构中,如果我省略结构日期的变量声明,即doj并尝试单独声明它它不需要任何对emp1的引用

struct date doj;

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

那样引用emp1
doj.date =15;

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

2 个答案:

答案 0 :(得分:3)

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;

答案 1 :(得分:1)

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

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

当您“访问”内部结构的成员时,您正在访问其他实例的成员。

请参阅here