首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typedef理解

Typedef理解
EN

Stack Overflow用户
提问于 2013-06-27 06:10:09
回答 2查看 146关注 0票数 2

我希望有人能告诉我我的理解是否正确。这是我的教授给我们的第一个作业的解决方案的一部分。

代码语言:javascript
复制
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,这是我们将用来遍历列表的指针,最后一行我非常困惑,我希望有人能给我解释一下,如果我理解错了,请纠正我。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-27 06:16:09

之后,struct alias将等同于alias_nodestruct alias *将等同于alias_nodeptr。您可以互换使用它们。您不能在结构本身中使用alias_nodealias_nodeptr,因为将该结构绑定到新名称的类型定义函数尚未求值。

它可能有点混乱,因为该结构包含numvalueschar *values[MAXARGS]。但是它是一个有效的结构:一个节点的链表,每个节点都包含一个名称和一组多个(numvalues)值。这里没有“列表头部”结构,只有节点。您可以在不创建标题的情况下使用链表。您只需要记住指向列表中第一个节点的指针。

票数 2
EN

Stack Overflow用户

发布于 2013-06-27 08:51:03

您对typedef部分的理解似乎有些不正确。上面的代码片段做了三件事:它声明并定义了一个名为struct alias的类型,它使用typedefstruct aliasstruct alias *类型创建类型别名,它还声明了一个名为alias_dictionary的变量,它的类型是其中一个typedefd别名。

首先,您需要执行以下操作:

代码语言:javascript
复制
typedef struct alias{
  char *name;
  int numvalues;
  char *values[MAAXARGS];
  struct alias *next;
} alias_node, *alias_nodeptr;

现在,这是一次做两件事,所以我将重申它更简单:

代码语言:javascript
复制
struct alias {
  char *name;
  int numvalues;
  char *values[30];
  struct alias *next;
};
typedef struct alias alias_node, *alias_nodeptr;

这是完全相同的事情,作为两个独立的步骤完成。

首先,我们声明一个struct alias,一个包含指向字符的指针的复合类型,一个int,一个指向字符的指针数组,以及一个指向结构的指针。其次,我们定义了两个类型别名alias_nodealias_nodeptr,这样声明alias_node foo;就等同于声明struct alias foo;,声明alias_nodeptr bar就等同于声明struct alias * bar;

最后,第三点。

代码语言:javascript
复制
alias_nodeptr alias_dictionary;

到目前为止,它所做的事情应该是相当明显的。您声明了一个名为alias_dictionary的变量,它是一个指向struct alias的指针。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17331357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档