如果有人可以详细解释,这两个声明之间有什么区别:
typedef struct atom {
int element;
struct atom *next;
};
和
typedef struct {
int element;
struct atom *next;
} atom;
这很正常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
定义
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 <specification> <name>;
完成之后,您可以<name>
像使用语言的任何内置类型一样来声明变量。
在您的第一个示例中,您<specification>
就是以 开头的所有内容struct atom
,但<name>
之后没有。所以你没有给类型规范起一个新名字。
在声明中使用名称struct
与定义新类型不同。如果要使用该名称,则必须始终在其前面加上struct
关键字。因此,如果您声明:
struct atom {
...
};
您可以使用以下命令声明新变量:
struct atom my_atom;
但你不能简单地声明
atom my_atom;
对于后者,您必须使用typedef
.
请注意,这是 C 和 C++ 之间的显着差异之一。在 C++ 中,声明 a struct
orclass
类型确实允许您在变量声明中使用它,您不需要typedef
. typedef
在 C++ 中对于其他复杂类型构造(例如函数指针)仍然有用。
您可能应该查看相关边栏中的一些问题,它们解释了该主题的其他一些细微差别。
typedef 关键字的一般语法为:
typedef existing_data_type new_data_type;
typedef struct Record {
char ename[30];
int ssn;
int deptno;
} employee;