我最近开始研究结构和指针但是我对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.*/
答案 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_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
类型的变量。