【问题标题】:Access struct inside struct with pointers使用指针访问结构内部的结构
【发布时间】:2016-09-10 08:40:07
【问题描述】:

我有 2 个相互关联的结构。这些组成了一个链表。

typedef struct  {
    char *text;
    int count;
} *Item;

typedef struct node {
    Item item;
    struct node *next;
} *link;

我正在构建一个查找函数来比较 Item 结构。

link lookup(link head, Item item){
    link list;
    for(list = head; list != NULL; list = list->next)
        if(strcmp(list->item->text, item->text) == 0)
            return list;
    return NULL;
}

更具体地说,我可以在 if 语句上执行 list->item->text 还是必须执行 (*list).(*item).text ?或者这根本不可能?

【问题讨论】:

  • 您正在通过指针引用结构,-> 运算符是正确的。 (但是,使用typedef 指向指针时要小心(例如typedef struct ... *Item),这可能会掩盖整个代码其余部分的间接级别,使乍一看很难确定)。通常比typedef struct ... Item 更好,因此您可以考虑代码本身的间接级别。有些人喜欢 typedef 指向一个指针,就我个人而言,我发现它通常会导致更多的问题而不是它的价值..
  • 你是对的,只是(*list).(*item).text 的语法不正确。相反,您需要写 (*(*list).item).text

标签: c list pointers struct compare


【解决方案1】:

你可以做你想做的事,除了你对第二种形式使用了错误的语法。以下是等价的:

list->item->text

和:

(*(*list).item).text

您所拥有的 (*list).(*item).text 将导致语法错误,因为您必须在 . 运算符之后有一个结构成员。

【讨论】:

    【解决方案2】:

    我可以在 if 语句上做list->item->text 吗?

    是的,因为两者都是指针。


    回想一下a->b 与(*a).b 相同。

    【讨论】:

      猜你喜欢
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多