我正在创建一个简单的嵌套结构,以了解它的功能过程。下面是示例:
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;
};
当你"访问"内部结构的成员时,你是在访问另一个实例的成员。
。