C 类型定义结构理解
我希望有人能告诉我我的理解是否正确。这是我的教授给我们的第一个作业的解决方案的一部分C 类型定义结构理解,c,struct,alias,C,Struct,Alias,我希望有人能告诉我我的理解是否正确。这是我的教授给我们的第一个作业的解决方案的一部分 typedef struct alias{ char *name; int numvalues; char *values[MAXARGS]; struct alias *next; } alias_node, *alias_nodeptr; alias_nodeptr alias_dictionary; 因此,我们正在定义一个结构别名,名称、numvalue和value对我来说都很熟悉,但
typedef struct alias{
char *name;
int numvalues;
char *values[MAXARGS];
struct alias *next;
} alias_node, *alias_nodeptr;
alias_nodeptr alias_dictionary;
因此,我们正在定义一个结构别名,名称、numvalue和value对我来说都很熟悉,但是定义“struct alias*next;”我们正在alias结构中定义一个别名类型,这就像链接列表中的头指针。最后我们定义了alias_node,*alias_nodeptr,这是我们将用来遍历列表的指针,也是我非常困惑的最后一行,我希望有人能向我解释一下,如果我误解了什么,请纠正我
谢谢 之后,typedef
struct alias
将与alias\u node
等效,struct alias*
将与alias\u nodeptr
等效。您可以互换使用它们。无法在结构本身内部使用alias\u node
或alias\u nodeptr
,因为尚未计算将该结构绑定到新名称的typedef
这可能有点混乱,因为结构包含
numvalues
和char*值[MAXARGS]
。它是一个有效的结构:一个节点的链表,每个节点包含一个名称和一组多个(numvalues
)值。这里没有“列表头”结构,只有节点。可以使用链表而不创建标题。您只需记住指向列表中第一个节点的指针。您对typedef
部分的理解似乎有点不正确。上面的代码片段做了三件事:声明并定义名为struct alias
的类型,使用typedef
为struct alias
和struct alias*
类型创建类型别名,并声明名为alias\u dictionary
的变量,其类型是typedef
d别名之一
首先,你要这样做:
typedef struct alias{
char *name;
int numvalues;
char *values[MAAXARGS];
struct alias *next;
} alias_node, *alias_nodeptr;
现在,这是同时做两件事,所以我将更简单地重申:
struct alias {
char *name;
int numvalues;
char *values[30];
struct alias *next;
};
typedef struct alias alias_node, *alias_nodeptr;
这是完全相同的事情,作为两个独立的步骤完成
首先,我们声明一个结构别名
,它是一个复合类型,包含指向char的指针、int、指向char的指针数组和指向struct的指针。
其次,我们定义了两种类型的别名,alias\u node
和alias\u nodeptr
,这样就可以声明alias\u node foo
相当于声明结构别名foo代码>,而alias_nodeptr bar
相当于声明struct alias*bar代码>
最后,第三
alias_nodeptr alias_dictionary;
到目前为止,这一点应该相当明显。您正在声明一个名为alias\u dictionary
的变量,它是指向struct alias
的指针