Typedef / struct声明

时间:2013-09-14 21:05:49

标签: c struct typedef

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

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

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

3 个答案:

答案 0 :(得分:14)

这是正常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_tstruct atom

的别名

创建对象

atom_t object;      
struct atom object; //both the ways are allowed and same

答案 1 :(得分:12)

typedef的目的是为类型规范指定名称。语法是:

typedef <specification> <name>;

完成后,您可以像使用任何内置类型的语言一样使用<name>来声明变量。

在您的第一个示例中,<specification>是以struct atom开头的所有内容,但后面没有<name>。所以你还没有为类型规范命名。

struct声明中使用名称与定义新类型不同。如果您想使用该名称,则必须在其前面加上struct关键字。所以如果你宣布:

struct atom {
    ...
};

您可以使用以下命令声明新变量:

struct atom my_atom;

但你不能简单地声明

atom my_atom;

对于后者,您必须使用typedef

请注意,这是C和C ++之间的显着差异之一。在C ++中,声明structclass类型确实允许您在变量声明中使用它,您不需要typedef。对于其他复杂类型的构造,例如函数指针,typedef在C ++中仍然很有用。

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

答案 2 :(得分:0)

typedef关键字的一般语法是: public static void main(String[] args) { int sum = 0; int num = 0; while (num <= 1000) { if (num % 13 == 0 || num % 15 == 0 || num % 17 == 0) { if (num % 30 != 0) { System.out.println("here" + num); sum = sum + num; } } ++num; } System.out.println("Sum = " + sum); }

typedef existing_data_type new_data_type;