2017-05-12 14 views
0
typedef struct { 
    int a; 
    int b; 
    int c; 
} abc; 

typedef struct { 
    abc c; 
} xyz; 

int main() { 
    abc ss[] = { 1, 2, 3, 4, 5, 6 }; 
    xyz cc[] = { ss }; 
    return 0; 
} 

こんにちは、 '5 using the structure variable cc`の値を印刷しますか? 私は多くの方法を試みましたが、失敗しました。構造体を持つ構造体の配列にアクセスします。

+1

'{SS};' '' ABCにevaluted ss' * ''ないabc'。 – BLUEPIXY

+2

構造体abcには3つのメンバーがありますが、6つのメンバーを初期化リストに渡します。なぜ1つのアイテムを持つ配列を使用していますか?どこにも何も印刷しません。完全なコードを投稿してください。 – Lundin

+1

[this](http://ideone.com/apiR2X)? – BLUEPIXY

答えて

1
にご main機能を変更

次の操作を行います
int main() 
{ 
    abc ss[]={ {1,2,3}, {4,5,6}}; 
    xyz cc[]={ss[0], ss[1]}; 
    return 0; 
} 

1.、内部に2つのabcの構造体を持つ配列ssを作成します。それぞれのフィールドには3つの値が得られます。

2.xyz構造体が2つある配列ccを作成します。それぞれにabc構造体が含まれます。今

あなたが5を印刷したい場合は、次のステートメントを使用します。

printf("%d\n", cc[1].c.b); 
+0

@BLUEPIXY C99で変わったようです。しかし、静的な記憶期間を持つ変数にはまだ適用されるので、私の記憶は完全にオフではありません。 (また、C89/C90、C99、C11コンパイラを使用しています) – user694733

0

ssはあなたがタイプabcの変数cに代入しようとしているタイプabcの配列です。

typedef struct{ 
abc *c; 
}xyz; 

を今、あなたは変数にアクセスすることができます。つまり

、あなたは次のようにあなたのstruct xyzを変更

abc c; 
abc ss[] = {1,2,3,4,5,6}; 
c = ss; 
と少し似て行っています。

完全なコード:

#include <stdio.h> 

typedef struct{ 
int a; 
int b; 
int c; 
}abc; 

typedef struct{ 
abc *c; 
}xyz; 

int main() 
{ 
abc ss[]={1,2,3,4,5,6}; 
xyz cc[] = {ss}; 

int x = cc[0].c[1].b; 

printf("%d", x); 

return 0; 
} 
関連する問題