最近、構造体とポインターについて勉強し始めましたが、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.*/
複数のtypedef
s、つまり同じものに対する複数の「名前」を定義し、2番目はそれへのポインタです。
最初のGet_noAllyp
は構造体に付けられた名前であり、no_getOf
は構造体へのポインターを表します。
つまり、no_getOf
を書き込むことは、関数シグネチャまたは変数宣言にGet_noAllyp *
を書き込むことと完全に同じです。
ここでは、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_noAllyp
はstruct Alias
を表しますno_getOf
はstruct Alias *
を表しますコード:
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_noAllyp
とno_getOf
が型になります(変数ではありません)。
Get_noAllyp
はstruct Alias
と同じであり、no_getOf
はstruct Alias *
と同じです(つまり、構造体エイリアスへのポインタ `)。
今、あなたは書くことができます:
struct Alias x;
struct Alias *y;
または
Get_noAllyp x;
no_getOf y;
x
をタイプstruct Alias
の変数として宣言し、y
をタイプpointer to a struct Alias
の変数として宣言します。