2016-12-17 117 views
1
#include<stdio.h> 
struct date 
{ 
     struct time 
     { 
       int sec; 
       int min; 
       int hrs; 
     }; 
     int day; 
     int month; 
     int year; 
    }; 
int main(void) 
{ 
    stuct date d,*dp=NULL; 
    dp=&d; 
} 

现在使用结构指针dp我想访问结构时间秒的成员。我该怎么做?如何使用指针访问嵌套结构的成员?

+1

你打算在'struct date'中有'struct time'类型的成员?如果是这样,你没有命名它,你写的东西不能编译。 – e0k

回答

1

您需要struct date创建struct time类型的成员,才能从struct date类型的对象访问struct timesec成员。

您可以选择不命名嵌套的struct,但您需要一个成员。

#include <stdio.h> 

struct date 
{ 
    // struct time { ... } time; or 
    // struct { ... } time; 
    // struct time 
    struct 
    { 
     int sec; 
     int min; 
     int hrs; 
    } time; // Name the member of date. 
    int day; 
    int month; 
    int year; 
}; 

int main(void) 
{ 
    struct date d,*dp=NULL; 
    dp=&d; 

    dp->time.sec = 10; // Access the sec member 
    d.time.min = 20; // Accces the min member. 
} 
0

嵌套结构基本上是一个结构内的结构。在你的例子中,struct timestruct date的成员。 访问结构成员的逻辑将保持不变。即您访问struct date的会员day的方式。

但在这里您需要创建struct time的结构变量才能访问其成员。

如果您想访问嵌套结构的成员,然后它看起来像,

dp->time.sec // dp is a ptr to a struct date 
d.time.sec // d is structure variable of struct date 

您可以检查下面的代码,

#include<stdio.h> 
struct date 
{ 
     struct time 
     { 
       int sec; 
       int min; 
       int hrs; 
     }time; 
     int day; 
     int month; 
     int year; 
}; 

int main(void) 
{ 
    struct date d = {1,2,3,4,5,6}, *dp; 

    dp = &d; 

    printf(" sec=%d\n min=%d\n hrs=%d\n day=%d\n month=%d\n year=%d\n",dp->time.sec, dp->time.min, dp->time.hrs, dp->day, dp->month, dp->year); 


} 

输出:

sec=1 
min=2 
hrs=3 
day=4 
month=5 
year=6