2015-06-13 2 views

ответ

1

Прежде всего элемента данных с именем next в структуре

struct name 
{ 
    int example; 
    name *next; 
}; 

и переменную с тем же именем объявленной после того, как структуры, как, например

struct name *next = NULL; 

две разные сущности.

Последнее объявление не инициализирует NULL элемент данных любого объекта структуры. Он объявляет указатель на объект типа структуры.

Теперь о разнице между этими двумя декларациями

struct name *next = NULL; 

и

name *next = NULL; 

В первом есть используются так называемым разработано название struct name типа. Его преимущество по сравнению со вторым объявлением заключается в том, что любой объект, счетчик или функция, объявленные с тем же именем name, скрывают объявление структуры. Например

struct name 
{ 
    int example; 
    name *next; 
}; 

enum { name, noname }; 

Здесь Перечислитель name скрывает тип struct name данных и если вы пишете, например

name *next = NULL; 

, то компилятор выдаст сообщение об ошибке.

Но если вы будете использовать разработанное имя

struct name *next = NULL; 

затем код компилируется успешно, потому что компилятор теперь знает, что name в этой декларации struct name.

Другая важная разница.

Рассмотрим следующий фрагмент кода

int main() 
{ 
    struct name 
    { 
     int example; 
     name *next; 
    }; 

    { 
     name *next = NULL; 
    } 
} 

В этом проножки объявление во внутреннем блоке кода декларирует указатель типа Struture объявленной во внешнем блоке кода.

Теперь переписать программу

int main() 
{ 
    struct name 
    { 
     int example; 
     name *next; 
    }; 

    { 
     struct name *next = NULL; 
    } 
} 

В этом случае заявление во внутреннем блоке коды представляет нового типа struct name, скрывающее объявление структуры во внешнем блоке коды.

2

"Какая разница между ..."

Там нет ни одного. Ключевое слово struct или class является необязательным в объявлениях указателей.

+0

Хорошо, спасибо! –

+0

@DianaPapukchieva было бы полезно для всех, если бы вы пошли дальше и прочитали вводный учебник по C++. Это, пожалуй, одна из первых вещей, которую хороший гид упоминает при объяснении классов. Нет необходимости спрашивать его (еще один раз) о переполнении стека. –

+0

Необязательный вообще при объявлении. – Puppy

Смежные вопросы