web-dev-qa-db-ja.com

構造体はどのように複数の名前にtypedefされていますか?

最近、構造体とポインターについて勉強し始めましたが、structの設計について完全には理解していなかったことがあります。 struct、つまりtypedef struct Aliasの宣言とその内容は理解していますが、ステートメントの最後にあるGet_noAllyp*no_getOfは理解していません。彼らは何ですか?私も本当に良い情報源を見つけることができませんでした。

typedef struct  Alias {
    char    *s_a_name;
    char    **s_aliases;
    short   *s_dumr;
    int     s_get_sum;
}Get_noAllyp, *no_getOf; /*Here, I don't understand this one. 
                        Where did these two variables come from?
                        And one of them is a pointer.*/
15
Volkan Güven

複数のtypedefs、つまり同じものに対する複数の「名前」を定義し、2番目はそれへのポインタです。

最初のGet_noAllypは構造体に付けられた名前であり、no_getOfは構造体へのポインターを表します。

つまり、no_getOfを書き込むことは、関数シグネチャまたは変数宣言にGet_noAllyp *を書き込むことと完全に同じです。

15
Mark Segal

ここでは、2つのtypedefが簡単に作成されています。上記のtypedefは、次のように分類できます。

typedef struct  Alias {
    char    *s_a_name;
    char    **s_aliases;
    short   *s_dumr;
    int     s_get_sum;
}Get_noAllyp;                  

typedef struct  Alias * no_getOf;

そう、

  • Get_noAllypstruct Aliasを表します
  • no_getOfstruct Alias *を表します
11
Sourav Ghosh

コード:

struct Alias {
    char    *s_a_name;
    char    **s_aliases;
    short   *s_dumr;
    int     s_get_sum;
}

Aliasという名前で、structである新しいデータ型を定義します。 C言語の元の設計は、構造体タイプ名を使用するときに常にstructキーワードのプレフィックスを付ける必要があるため、ここでは少し不器用です。

これはコードを意味します:

struct  Alias {
    char    *s_a_name;
    char    **s_aliases;
    short   *s_dumr;
    int     s_get_sum;
} Get_noAllyp, *no_getOf;

タイプGet_noAllypの変数struct Aliasとタイプno_getOfの変数pointer to struct Aliasを宣言します。

typedefキーワードを前に置くと、識別子Get_noAllypno_getOfが型になります(変数ではありません)。

Get_noAllypstruct Aliasと同じであり、no_getOfstruct Alias *と同じです(つまり、構造体エイリアスへのポインタ `)。

今、あなたは書くことができます:

struct Alias x;
struct Alias *y;

または

Get_noAllyp x;
no_getOf y;

xをタイプstruct Aliasの変数として宣言し、yをタイプpointer to a struct Aliasの変数として宣言します。

5
axiac