我正在创建一个简单的嵌套结构,以了解它正在运行的进程。以下是示例:
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;
在这种情况下,编译器没有给出任何错误。我也可以访问结构日期的成员,而不需要像
那样引用emp1doj.date =15;
我只是想知道这怎么可能?
答案 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。