我希望有人能告诉我我的理解是否正确。这是我的教授给我们的第一个作业的解决方案的一部分。
typedef struct alias{
char *name;
int numvalues;
char *values[MAXARGS];
struct alias *next;
} alias_node, *alias_nodeptr;
alias_nodeptr alias_dictionary;所以我们定义了一个结构别名,名称,数值和值对我来说都很熟悉,但是定义“结构别名*next;”我们在别名结构中定义了一个别名类型,这就像链表中的头指针。最后我们定义了alias_node,*alias_nodeptr,这是我们将用来遍历列表的指针,最后一行我非常困惑,我希望有人能给我解释一下,如果我理解错了,请纠正我。
谢谢!
发布于 2013-06-27 06:16:09
之后,struct alias将等同于alias_node,struct alias *将等同于alias_nodeptr。您可以互换使用它们。您不能在结构本身中使用alias_node或alias_nodeptr,因为将该结构绑定到新名称的类型定义函数尚未求值。
它可能有点混乱,因为该结构包含numvalues和char *values[MAXARGS]。但是它是一个有效的结构:一个节点的链表,每个节点都包含一个名称和一组多个(numvalues)值。这里没有“列表头部”结构,只有节点。您可以在不创建标题的情况下使用链表。您只需要记住指向列表中第一个节点的指针。
发布于 2013-06-27 08:51:03
您对typedef部分的理解似乎有些不正确。上面的代码片段做了三件事:它声明并定义了一个名为struct alias的类型,它使用typedef为struct alias和struct alias *类型创建类型别名,它还声明了一个名为alias_dictionary的变量,它的类型是其中一个typedefd别名。
首先,您需要执行以下操作:
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;这是完全相同的事情,作为两个独立的步骤完成。
首先,我们声明一个struct alias,一个包含指向字符的指针的复合类型,一个int,一个指向字符的指针数组,以及一个指向结构的指针。其次,我们定义了两个类型别名alias_node和alias_nodeptr,这样声明alias_node foo;就等同于声明struct alias foo;,声明alias_nodeptr bar就等同于声明struct alias * bar;。
最后,第三点。
alias_nodeptr alias_dictionary;到目前为止,它所做的事情应该是相当明显的。您声明了一个名为alias_dictionary的变量,它是一个指向struct alias的指针。
https://stackoverflow.com/questions/17331357
复制相似问题