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

时间:2015-05-21 09:40:11

标签: c struct typedef

我最近开始研究结构和指针但是我对struct的设计还没有完全理解。我理解structtypedef 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.*/

3 个答案:

答案 0 :(得分:13)

它为同一个东西定义了多个typedef s,即多个“名称”,而第二个是指向它的指针。

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

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

答案 1 :(得分:10)

在这里,有两个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 *

答案 2 :(得分:5)

代码:

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;

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

通过将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类型的变量。