我是C编程的初学者,但我想知道在定义结构时使用typedef与不使用typedef之间有什么区别。在我看来,这两者并没有什么区别,它们实现的目标是一样的。

struct myStruct{
    int one;
    int two;
};

vs.

typedef struct{
    int one;
    int two;
}myStruct;

当前回答

下面的代码创建了一个别名为myStruct的匿名结构:

typedef struct{
    int one;
    int two;
} myStruct;

没有别名就不能引用它,因为没有为结构指定标识符。

其他回答

另一个没有指出的区别是,给struct一个名称(即struct myStruct)也允许你提供结构的前向声明。所以在其他文件中,你可以这样写:

struct myStruct;
void doit(struct myStruct *ptr);

而不需要知道定义。我建议你把这两个例子结合起来:

typedef struct myStruct{
    int one;
    int two;
} myStruct;

这为您提供了更简洁的类型定义名称的便利,但如果需要,仍然允许您使用完整的结构名称。

与其他构造一样,typedef用于为数据类型赋予新名称。在这种情况下,这样做主要是为了使代码更干净:

struct myStruct blah;

vs.

myStruct blah;

在C(不是c++)中,你必须像这样声明结构变量:

struct myStruct myVariable;

为了能够使用myStruct myVariable;相反,你可以对结构进行类型定义:

typedef struct myStruct someStruct;
someStruct myVariable;

你可以将结构定义和类型定义结合在一个声明匿名结构和类型定义的语句中。

typedef struct { ... } myStruct;

不同之处在于使用结构体时。

第一种方法是:

struct myStruct aName;

第二种方法允许您删除关键字struct。

myStruct aName;

对于后一个示例,在使用结构时省略了struct关键字。所以在你的代码中,你可以这样写:

myStruct a;

而不是

struct myStruct a;

这节省了一些输入,并且可能更易于阅读,但这是一个品味问题