嵌套的结构和指针

时间:2013-07-18 06:02:26

标签: c++ pointers struct

我正在学习嵌套结构并遇到以下代码:

// 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

链接结构在Stack的范围内,访问链接我必须使用Stack :: Link。

我对关闭Link结构后声明的指针头感到有点困惑。

这是否意味着在Stack范围内有一个名为head的链接指针变量?

将头指针定义为:

的效果是什么
};
Link* head;

VS

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

3 个答案:

答案 0 :(得分:0)

没有区别。这两个声明都会生成Stack::head类型的Stack::Link*成员。

答案 1 :(得分:0)

  

这是否意味着在Link范围内有一个名为head的Stack指针变量?

是的,这是完全正确的。

关于你的第二个问题,两种声明风格之间没有语义差异。

答案 2 :(得分: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();
};