2016-12-17 7 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, я хочу получить доступ к члену структуры времени sec.Как это сделать?Как получить доступ к члену вложенной структуры с помощью указателя?

+1

Вы намерены иметь член типа 'struct time' в' struct date'? Если это так, вы не назовете его, и то, что вы написали, не компилируется. – e0k

ответ

1

Вам нужно создать элемент типа struct time в struct date, прежде чем вы можете получить доступ к sec члену struct time из объекта типа struct date.

Вы можете не называть вложенный 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 time является членом struct date. Логика доступа к элементу структуры останется прежней. то есть путем доступа к члену day от struct date.

, но здесь вам потребуется создать структурную переменную для 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 

 Смежные вопросы

  • Нет связанных вопросов^_^