17

如果有人可以详细解释,这两个声明之间有什么区别:

typedef struct atom {
  int element;
  struct atom *next;
};

typedef struct {
  int element;
  struct atom *next;
} atom;
4

3 回答 3

15

这很正常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
于 2013-09-14T21:46:07.023 回答
13

的目的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 structorclass类型确实允许您在变量声明中使用它,您不需要typedef. typedef在 C++ 中对于其他复杂类型构造(例如函数指针)仍然有用。

您可能应该查看相关边栏中的一些问题,它们解释了该主题的其他一些细微差别。

于 2013-09-14T21:47:50.577 回答
0

typedef 关键字的一般语法为: typedef existing_data_type new_data_type;

typedef struct Record {
    char ename[30];
     int ssn;
    int deptno;
} employee;
于 2016-05-06T06:49:00.567 回答