2015-07-11 29 views
1

我創建一個簡單的嵌套結構,以獲得意識到它的運作process.Here是例如:聲明中嵌套結構內部結構變量沒有涉及外部結構

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

在這種情況下,如果我想訪問成員內部結構的,我需要做的是這樣

emp1.doj.date = 10; 

但在上述結構中,如果我省略結構日期即司法部的變量聲明,並嘗試單獨聲明它它並不需要任何參考EMP1例如

struct date doj; 

在這種情況下編譯器沒有給出任何錯誤。我也可以訪問結構日期的成員,沒有任何參考emp1像

doj.date =15; 

我只想知道這是如何可能?

+0

您能否提供您使用doj.date的完整代碼? –

回答

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

C沒有命名空間(或正確地說,特殊作用域規則)。所以你的內部結構也可以定義在外部結構之外。

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

當您在「訪問」內部結構的成員時,您正在訪問不同實例的成員。

參見here