2012-05-04 9 views
0

私はCで上級ではないです、私はJavaがもっと好きです。私は、私の仲間の一人に次のコードを見ました。彼にとってはうまくいきませんでしたので、私は好奇心が強いですが、彼はそれがうまくいっていると言いました。ポインタを構造体として宣言できますか?

typedef struct nameOfStruct { 
    type1 *elem1; 
    type2 *elem2; 
    struct nameOfStruct *next; 
} *nameOfStruct; 

だから、それは*nameOfStructを持つことが可能である、またはそれは単にnameOfStructでなければなりません。

+0

何が見つかりましたか?あなたは精緻化できますか? – rt2800

+4

このルートを下ってはいけません。 Cのポインタを明示してください。人々がポインタであり解放される必要があることを忘れるので、長期的には苦痛の塊を保存します。 CにはJavaのガベージコレクタのリンクを解除していません。 –

答えて

2

これは有効ですが、(オブジェクトタイプのように聞こえますが、実際はポインタです)使用するのは非常に紛らわしいでしょう。だからそれを避けてください。

1

これは、呼び出し元のコードを見ることなく、これを答えることは不可能ですが、ここであなたが知っておくべきものだ。

*nameOfStructはかなり名は、それが実際にあることを示唆していないとしてmissleadingれるポインタは構造体へのエイリアスを作成しますポインタ。私はそれを使用することをお勧めしません。

struct nameOfStructのショートカットとして使用する場合は、*を削除してください。

0

nameOfStructは、struct nameOfStructへのポインタです。 *nameOfStructは、struct nameOfStructへのポインタへのポインタです。

どちらも有効で、異なることを意味します。最初のものを使用したいと思います。名前が混乱しているので、あなたのtypedef nameOfStruct_ptrの名前を付ける必要があります。

+0

なぜこれがダウンリストされたのか分かりません。 –

+0

@OliCharlesworthどちらも私は何も間違っていると言いましたか?あるいは、気分が悪い人もいますか?理解できません。 –

関連する問題