如何将结构类型定义为多个名称?
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_noAllyp
和 no_getOf
成为类型(而不是变量)。
Get_noAllyp
与 struct Alias
相同,no_getOf
与 struct Alias *
相同(即指向结构别名的指针)。
现在你可以写:
struct Alias x;
struct Alias *y;
或
Get_noAllyp x;
no_getOf y;
将 x
声明为 struct Alias
类型的变量,将 y
声明为 pointer to a struct Alias
.
类型的变量
我最近开始研究结构体和指针,但是对于 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_noAllyp
和 no_getOf
成为类型(而不是变量)。
Get_noAllyp
与 struct Alias
相同,no_getOf
与 struct Alias *
相同(即指向结构别名的指针)。
现在你可以写:
struct Alias x;
struct Alias *y;
或
Get_noAllyp x;
no_getOf y;
将 x
声明为 struct Alias
类型的变量,将 y
声明为 pointer to a struct Alias
.