2011-11-04 20 views
2
typedef struct s_coord 
{ 
    int  ax; 
    int  ay; 
    int  bx; 
    int  by; 
    int  cx; 
    int  cy; 
    int  dx; 
    int  dy; 
} t_coord; 

typedef struct s_piece 
{ 
    t_coord piece[6]; 
} t_piece; 

これは、7つの構造のテーブルを作成する正しい方法でしたか?構造のテーブル

そしてどのようにしてax、ayなどを各テーブルに設定できますか?

ps:テトリスを作る。

+2

は、私にはよさそうだとして、それらが参照されている

typedef struct s_piece { t_coord piece[7]; } t_piece; 

を必要とします! – japreiss

+1

もしあなたが '7'を望むなら' t_coord piece [7]; 'を持つべきです、' [0] 'と' [6] 'を使うことができますが、**' ** [7] ' (afaikは標準でよく定義されていますが、使用すべきではありません)。たぶん、あなたが何をしてアドバイスをしているか教えてください。 – Muggen

+0

あなたが持っているものは上品に見えます... – Dmitri

答えて

1

これは、6 t_coord構造のテーブルで構成されるデータ構造を定義する通常の方法です。 (これらのうち7つが必要な場合は[6][7]に変更してください)

typedef t_coord[6] a_piece;を定義することもできます。しかし、アレイが特別に動作するので、時々驚くべき振る舞いをするでしょう。たとえば、a_piece a1, a2;が指定されている場合は、割り当てa1 = a2;を書くことはできませんが、構造体(t_piece t1, t2; … t1 = t2;)を割り当てることはできます。そして、配列は多くの状況でポインタに崩壊します。特に、関数から配列を渡したり返すことはできません(データ構造のサイズを考慮すると、通常はポインタを渡します)。構造が不透明のままであると思われるもう1つの理由は、より強い型付けを提供するということです。誤ってt_pieceを他のものに代入しようとするとコンパイラは不平を言いますが、コンパイラはa_piecet_coord* (しかし実際には、データへのポインタであり、データのコピーではありません)。

+0

構造として '0'を考慮しませんか? – Slrs

+0

@Slrsいいえ、 '0'は数値(整数または浮動小数点)として、またポインタ(' NULL'を意味する)として使用できます。構造体、共用体または配列として使用することはできません。 – Gilles

0

あなたは7をしたい場合は、piece[6]piece[0](0からコンピュータの数物事を)

関連する問題