如何将结构类型定义为多个名称?

How a struct being typedef-ed to multiple names?

我最近开始研究结构体和指针,但是对于 struct 的设计我还没有完全理解。我理解 struct 的声明,即 typedef struct Alias 及其内容,但我不理解声明末尾的 Get_noAllyp*no_getOf。这些是什么?我也找不到好的资源。

typedef struct  Alias {
    char    *s_a_name;
    char    **s_aliases;
    short   *s_dumr;
    int     s_get_sum;
}Get_noAllyp, *no_getOf; /*Here, I don't understand this one. 
                        Where did these two variables come from?
                        And one of them is a pointer.*/

它定义了多个typedef,即同一个东西的多个"names",而第二个是指向它的指针。

第一个 Get_noAllyp 是为结构指定的名称,而 no_getOf 表示指向它的指针。

即,写no_getOf与在函数签名或变量声明中写Get_noAllyp *完全相同。

在这里,有两个 typedef 正在以简写方式装箱。上面的typedef可以分解成

typedef struct  Alias {
    char    *s_a_name;
    char    **s_aliases;
    short   *s_dumr;
    int     s_get_sum;
}Get_noAllyp;                  

typedef struct  Alias * no_getOf;

所以,

  • Get_noAllyp表示struct Alias
  • no_getOf表示struct Alias *

代码:

struct Alias {
    char    *s_a_name;
    char    **s_aliases;
    short   *s_dumr;
    int     s_get_sum;
}

定义了一个名为 Alias 并且是 struct 的新数据类型。 C 语言的原始设计在这里有点笨拙,因为它要求结构类型名称在使用时始终以 struct 关键字为前缀。

这意味着代码:

struct  Alias {
    char    *s_a_name;
    char    **s_aliases;
    short   *s_dumr;
    int     s_get_sum;
} Get_noAllyp, *no_getOf;

声明类型struct Alias的变量Get_noAllyp和类型pointer to struct Alias的变量no_getOf

通过将 typedef 关键字放在前面,标识符 Get_noAllypno_getOf 成为类型(而不是变量)。

Get_noAllypstruct Alias 相同,no_getOfstruct Alias * 相同(即指向结构别名的指针)。

现在你可以写:

struct Alias x;
struct Alias *y;

Get_noAllyp x;
no_getOf y;

x 声明为 struct Alias 类型的变量,将 y 声明为 pointer to a struct Alias.

类型的变量