2013-07-18 4 views
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 

Ссылки находится в пределах стека и получить доступ к ссылке, которую я должен был бы использовать Stack :: Link.

Я немного смущен относительно головы указателя, объявленной после}, чтобы закрыть структуру ссылок.

Означает ли это, что есть указатель указателя ссылки с именем head внутри области стека?

Что такое эффект определения указателя головы, как:

}; 
Link* head; 

против

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

Sidenote: вы * действительно * хотите использовать связанный список для сбора стека? Кажется расточительным. –

+0

Я просто изучаю C++, и это то, что я использовал в своих структурах и алгоритмах данных класса – SeekingAlpha

+0

@ H2CO3, как бы вы рекомендовали реализовать стек? – SeekingAlpha

ответ

0

Там нет никакой разницы. Оба объявления приводят к члену Stack::head типа Stack::Link*.

0

Означает ли это, что есть переменная Link указатель с именем голова внутри Stack рамки?

Да, это точно.

Что касается вашего второго вопроса, между двумя стилями декларации нет семантической разницы.

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(); 
}; 
Смежные вопросы