1

ネストされた構造について学んでいて、次のコードに出くわしました:

// Stack.h

#ifndef STACK_H
#define STACK_H

struct Stack{
    struct Link{
        void* data;
        Link* next;
        void initialize(void* dat, Link* nxt);
    }* head;
    void initialize();
    void push(void* dat);
    void* peek();
    void* pop();
    void cleanup();
};

#endif // STACK_H

Link 構造は Stack のスコープ内にあり、Link にアクセスするには Stack::Link を使用する必要があります。

Link 構造体を閉じるために } の後に宣言されているポインター ヘッドについて少し混乱しています。

これは、Stack スコープ内に head という名前のリンク ポインター変数があるということですか?

ヘッド ポインターを次のように定義すると、どのような効果がありますか。

};
Link* head;

}* head; //as per the code above?
4

3 に答える 3

0

違いはありません。どちらの宣言もStack::headtype のメンバーになりStack::Link*ます。

于 2013-07-18T06:08:16.610 に答える
0

これは、スコープLink内に head という名前のポインター変数があるということですか?Stack

はい、その通りです。

2 番目の質問については、2 つのスタイルの宣言の間に意味的な違いはありません。

于 2013-07-18T06:09:36.543 に答える
0

セマンティックの単なる省略形です。私たちがどのように使用するかのように+=。はい、ローカルポインター変数があります。

struct Stack{
    struct Link{
        void* data;
        Link* next;
        void initialize(void* dat, Link* nxt);
    };

    Link* head;  //Same as code as in your program
    void initialize();
    void push(void* dat);
    void* peek();
    void* pop();
    void cleanup();
};
于 2013-07-18T06:30:30.767 に答える