В чем разница между этими двумя объявлениями, если кто-то может объяснить подробно:
typedef struct atom {
int element;
struct atom *next;
};
и
typedef struct {
int element;
struct atom *next;
} atom;
В чем разница между этими двумя объявлениями, если кто-то может объяснить подробно:
typedef struct atom {
int element;
struct atom *next;
};
и
typedef struct {
int element;
struct atom *next;
} atom;
Цель typedef
- дать имя спецификации типа. Синтаксис:
typedef <specification> <name>;
После того, как вы это сделали, вы можете использовать <name>
так же, как любой из встроенных типов языка для объявления переменных.
В вашем первом примере вы <specification>
- это все, начиная с struct atom
, но после него нет <name>
. Таким образом, вы не указали новое имя спецификации типа.
Использование имени в объявлении struct
не совпадает с определением нового типа. Если вы хотите использовать это имя, вам всегда следует предшествовать ключевое слово struct
. Поэтому, если вы заявляете:
struct atom {
...
};
Вы можете объявить новые переменные с помощью:
struct atom my_atom;
но вы не можете просто объявить
atom my_atom;
Для последнего вы должны использовать typedef
.
Обратите внимание, что это одна из заметных отличий между C и С++. В С++ объявление типа struct
или class
позволяет вам использовать его в объявлениях переменных, вам не нужен typedef
. typedef
по-прежнему полезен в С++ для других сложных конструкций типа, таких как указатели на функции.
Вероятно, вам следует рассмотреть некоторые вопросы на боковой панели Связанные, они объясняют некоторые другие нюансы этого вопроса.
Это обычный structure declaration
struct atom {
int element;
struct atom *next;
}; //just declaration
создание object
struct atom object;
struct atom {
int element;
struct atom *next;
}object; //creation of object along with structure declaration
и
Это определение типа struct atom
type
typedef struct atom {
int element;
struct atom *next;
}atom_t; //creating new type
Здесь atom_t
является псевдонимом для struct atom
создание объекта
atom_t object;
struct atom object; //both the ways are allowed and same
Общий синтаксис ключевого слова typedef будет следующим:
typedef existing_data_type new_data_type;
typedef struct Record {
char ename[30];
int ssn;
int deptno;
} employee;