C 结构实例和名称之间的差异

C 结构实例和名称之间的差异,c,data-structures,struct,typedef,C,Data Structures,Struct,Typedef,两者的区别是什么 typedef struct complex { int x; int y; }; 及 在第二种情况下,附加的comp有什么作用? 我尝试在第一种情况下定义一个新的complex类型的变量,在第二种情况下使用comp,两者都产生了相同的结果。。。请帮忙 第一个typedef是无用的,编译可能会为此向您发出警告 在第二个typedef之后,无论何时使用struct complex作为类型,都可以使用comp。您可以将第二个代码修改为以下等效形式: struct

两者的区别是什么

typedef struct complex {
    int x;
    int y;
};

在第二种情况下,附加的
comp
有什么作用?
我尝试在第一种情况下定义一个新的
complex
类型的变量,在第二种情况下使用
comp
,两者都产生了相同的结果。。。请帮忙

第一个
typedef
是无用的,编译可能会为此向您发出警告

在第二个
typedef
之后,无论何时使用
struct complex
作为类型,都可以使用
comp
。您可以将第二个代码修改为以下等效形式:

struct complex { 
    int x;
    int y;
};
typedef struct complex comp;
您可以看到,
struct complex
定义了一个类型,而
typedef
为它提供了一个替代名称

struct complex {
    int x;
    int y;
} comp;
这是创建复杂类型变量的简写。 comp之前存在;因此,它被视为complex类型的变量

struct {
    int x;
    int y;
} comp;

您也可以使用创建其结构类型变量的旧编译器来执行此操作。

typedef的目的是为由一个或多个类型组件组成的类型声明指定一个简单名称

在第一个声明中,没有为名为complex的结构指定任何名称。因此,编译器将生成一个警告:

i.e. warning: declaration does not declare anything 
通常,在将typedef与结构[或联合]一起使用时,最好(不太详细)使用未命名的结构,如:

typedef struct {int x; int y;} complex;
长话短说:

struct complex {
    int x;
    int y;
};
// forces you to use :
struct complex c;
但是:


typedef只是可读性问题

请注意,typedef下“变量名”的含义不同,您描述的情况并非如此。
struct complex {
    int x;
    int y;
};
// forces you to use :
struct complex c;
typedef struct complex {
    int x;
    int y;
} comp;
// allows you to use :
comp c;