2015-01-31 2 views
1

Я изучаю структуры в C из K & R книги и столкнулся с этим:Структура декларации с указателем на него

struct{ 
    int len; 
    char *str 
} *p; 

Я смущен этим, потому что, когда имя переменной структуры должно быть, они дали указатель *p. Может ли кто-нибудь помочь мне здесь? Что означает это заявление?

+0

Если ответ ниже помог вам, пожалуйста, примите его, нажав V рядом с ним. Спасибо. –

ответ

3

Это объявление является указателем на структуру, состоящую из двух полей: int и char*. Эта структура не имеет имени, и если вы хотите объявить другой указатель той же структуры, вам придется записать ее снова.

Обратите внимание, вы можете написать что-то вроде этого:

struct MyStruct { 
int data1; 
char data2; 
}; 

Это будет определять новый тип структуры, которую можно использовать позже, как это объявить переменную: struct MyStruct myVar;. Отличие от того, что вы написали, состоит в том, что эта структура не объявляет новую переменную, а новый тип, поскольку структура в моем примере имеет имя, а ваше - нет.

Другой вариант - использовать typedef и присвоить этой структуре имя, а затем вы можете использовать имя, которое вы ему дали, чтобы объявить больше переменных этого типа.

Подробнее об этом можно узнать на странице http://en.wikipedia.org/wiki/Typedef в разделе «Упрощение декларации».