8

C今まで見たことのない構文の構造体を見ています。構造は次のようになります。

typedef struct structExample {
   int member1;
   int member2
} * structNAME;

私は通常、次の構造でそれを知っています:

typedef struct structExample {
   int member1;
   int member2
} structNAME;

次のように言うことで、2番目の構造体定義のメンバーを参照できます。

structNAME* tempStruct = malloc(sizeof(structNAME));
// (intitialize members)
tempstruct->member1;

最初の構造体定義でその余分なことは何をし*ますか、そして最初の構造体定義のメンバーをどのように参照しますか?

4

5 に答える 5

4

これは、定義された型がポインタ型であることを意味します。これは、型を宣言するための同等の方法です。

struct structExample {
    int member1;
    int member2;
};
typedef struct structExample * structNAME;

次のように使用します。

structNAME mystruct = malloc (sizeof (struct structExample));
mystruct->member1 = 42;
于 2013-03-25T13:53:35.853 に答える
2

typedefは、これら2つのステートメントを同じにします

struct structExample *myStruct;
structName myStruct;

それはstructNameへのポインタを表しますstruct structExample

意見として、変数がポインターであるかどうかを判断するのが難しくなるため、このコーディングスタイルは嫌いです。あなたが持っているならそれは役に立ちます

typedef struct structExample * structExampleRef;

struct structExampleそれが;へのポインタであるというヒントを与えるため。

于 2013-03-25T13:52:51.530 に答える
1

structNAME上のポインタとして定義されますstruct structExample。だからあなたはできる

structNAME tempStructPtr = malloc(sizeOf(struct structExample));
tempStructPtr->member1 = 2;
于 2013-03-25T13:50:38.950 に答える
1

これらを理解する秘訣はtypedef、宣言の前に置いて、にTYPENAME VARIABLENAME変換できることtypedef TYPENAME ALIASEDNAMEです。

VARIABLENAMEこれが単純な宣言である場合、アスタリスクを部分の一部にすることはできないため、型の一部である必要があります。タイプ名に続くアスタリスクは、前のタイプへの「ポインタ」を意味します。

これを比較してください:

typedef int * my_int_pointer;

intを宣言する代わりにあなたの場合を除いて、それはまったく同じですstruct

于 2013-03-25T14:15:22.680 に答える
0

その場合、(* structNAME)はその構造体のポインター変数です。

于 2013-03-25T14:06:23.617 に答える