【问题标题】:Pointer to pointer to struct in C指向 C 中 struct 的指针
【发布时间】:2016-03-13 14:22:39
【问题描述】:

我正在使用指针和结构在 C 中实现堆栈。 Push 和 crateStack 函数运行良好(它们都在内存中创建新元素)。无论如何,弹出功能不起作用,我不知道为什么,这是该功能的代码:

int pop(element **lastStackEl)
{
  int poppedValue = *lastStackEl->value;
  element *temp = *lastStackEl->prev;
  free(*lastStackEl);
  *lastStackEl=temp;
  return poppedValue;
}

这是我的结构:

typedef struct Element {
  int value;
  struct Element *prev;
} element;

编译器在弹出函数的第一行和第二行给出错误:

error: request for member 'value' in something not a structure or union
int poppedValue = *lastStackEl->value;

【问题讨论】:

    标签: c pointers struct


    【解决方案1】:

    根据operator precedence,间接(取消引用)运算符(*)晚于成员访问运算符(->)。因此,如果没有明确的括号,您的语句的行为就像

    int poppedValue = *(lastStackEl->value);
    

    现在,lastStackEl 是指向 element 的指针,它不能用作成员访问运算符的 LHS。这就是错误消息的全部内容。

    您需要先解除对lastStackEl 的引用(以获得element* 类型),然后,您可以使用-> 访问成员value。你应该写

    int poppedValue = (*lastStackEl)->value;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 2016-01-26
      • 2019-09-10
      • 2012-05-06
      • 1970-01-01
      相关资源
      最近更新 更多