可能重复:
Purpose of struct, typedef struct, in C++
typedef struct vs struct definitions
我知道在C
中有两种声明结构的方法struct point{
int x, y;
};
和
typedef struct{
int x, y;
} point;
但是这两种方法之间的区别是什么?我何时使用typedef方法而不是另一种方法呢?
答案 0 :(得分:2)
差异:
point p;
与第二个结合使用。答案 1 :(得分:1)
只有一种方法可以使用struct
关键字在 C 中声明struct
,可选地后跟结构名称,然后是成员字段在大括号中列出。所以你可以:
struct point_st {
int x, y;
};
此处point_st
是您的结构的名称(或标记)。请注意,结构名称在C中具有与类型不同的名称空间(这在C ++中是不同的)。所以我习惯用_st
后缀结构名称,如上所示。
您可以(独立地)使用typedef定义类型名称,例如
typedef struct point_st Point;
(您可以在任何C类型BTW上使用typedef
。
例如,Gtk和Glib有很多不透明的类型,它们是不透明的结构;只有实现知道并关心结构成员。
当然编译器需要知道结构的字段来分配它;但是如果你只使用指向不透明结构的指针,你不需要声明结构(即它的大括号中的字段)。
答案 2 :(得分:0)
对于第一种形式,变量声明必须是:
struct point A;
第二种形式允许声明没有struct
的变量,如
point B;