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 指针变量?

将头指针定义为:

};
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

是的,完全正确。

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

于 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 回答