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
的指针