2013-03-25 14 views
5

C構造体を見たことがあります。`` * `は` `typedef struct`宣言で何を意味しますか?

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

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

私が言って二構造体定義のメンバーを参照することができます:私は、通常の構造であることを知っている

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

:構造は次のようになりますその最初の構造体定義内の余分な*は何を行い、最初の構造体定義のメンバーをどのように参照しますか?

+3

私の目の間に銃がない限り、私は決してこれをしません。 –

+1

C本の重複の可能性あり –

答えて

4

これは、定義された型がポインタ型であることを意味します。その場合(* structNAME)で

structNAME mystruct = malloc (sizeof (struct structExample)); 
mystruct->member1 = 42; 
+5

2番目の例では、初期化されていないポインタを逆参照しています。 – interjay

+1

mallocを自由に削除するのではないですか? – Oliver

+0

あなたは間違いなくこのように使用しません。 – UmNyobe

1

structNAMEは、struct structExample上のポインタとして定義されます。だから、私はので、このコーディングスタイルを嫌い、typedefでは、これら2つの文それは意見としてstruct structExample

へのポインタのためのstructNameスタンドを作る同じ

struct structExample *myStruct; 
structName myStruct; 

を作る

structNAME tempStructPtr = malloc(sizeOf(struct structExample)); 
tempStructPtr->member1 = 2; 
2

を行うことができます変数がポインタであるかどうかを知ることは難しくなります。それはあなたがそれがstruct structExampleへのポインタであるというヒントを与えることを

typedef struct structExample * structExampleRef; 

を持っている場合に役立ちます。

0

その構造体のポインタ変数..です

1

:あなたはこのようにそれを使用することになり

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

:これは型を宣言するために同等の方法でありますこれらを理解する秘密は、TYPENAME VARIABLENAMEtypedef TYPENAME ALIASEDNAMEにするために、typedefを宣言の前に置くことができるということです。

アスタリスクは平易な宣言の場合はVARIABLENAME部分の一部ではないため、型の一部でなければなりません。型名に続くアスタリスクは、先行する型への「ポインタ」を意味します。

は、この比較:

typedef int * my_int_pointer; 

それはあなたのケースの代わりに、intあなたがstructを宣言している以外は、まったく同じです。