3

スタックを構成するノードの構造が与えられましたが、理解に苦慮しています。

    struct stackNode 
{
  char data;
  struct stackNode *nextPtr;
};

typedef struct stackNode StackNode; 
typedef StackNode *StackNodePtr;

名前が StackNode に変更された stackNode という構造体 (または、名前以外はすべて同じ 2 番目の型?) があることを理解しています。これには、char と stackNode へのポインターの 2 つの型があります。

最後の行が何を意味するのかわかりません。誰かステップスルーして説明してもらえますか? これは、StackNodePtr と呼ばれる、StackNode へのポインターである新しい型があることを意味すると思います。これは正しいですか?

4

2 に答える 2

4

はい、 a を使用するときはいつでも、StackNodePtr本質的に aStackNode*と等しいa を使用していますstruct stackNode*。スペースとアスタリスクの配置は、明らかに混乱を招く可能性があります。私は個人的typedef StackNode* StackNodePtr;に、何を何に型定義するかを少し明確にするためにそれを書きます。

これらの 3 行は等しくなります。

StackNodePtr myPointer;
StackNode *myPointer; 
struct stackNode *myPointer;

の理由は、typedef struct stackNode StackNode通常、structそれを使用するたびに書き込む必要がないようにするためです。

于 2013-05-09T01:14:41.250 に答える
2

あなたには3つのことがあります。

  1. という名前の型を宣言しstruct stackNode、構造定義を提供しています。
  2. StackNodeのエイリアスである(および型互換性がある)新しい型 を定義していstruct stackNodeます。
  3. 新しい型 を定義しています。これは(StackNodePtrおよび と型互換性があります) のエイリアスです。StackNode *struct stackNode *

つまり、ノード変数を として宣言し、リスト ヘッドを として宣言する代わりに、ノード変数を としてstruct stackNode newNode、リスト ヘッドを として宣言struct stackNode *headします。StackNode newNodeStackNodePtr head

これはかなり一般的なイディオムですが、この方法を推奨しない人もいます。(もちろん、これが正しい方法だと主張する人もいます。)

于 2013-05-09T01:24:58.917 に答える