2016-12-17 8 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 timesecメンバーにアクセスする前に、struct dateタイプstruct timeのメンバーを作成する必要があります。

ネストしたネームには、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のメンバーです。 構造体のメンバにアクセスするロジックは同じままです。つまり、メンバーにアクセスする方法daystruct 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 
関連する問題