指向C中结构的指针

时间:2016-03-13 14:22:39

标签: c pointers struct

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

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;

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

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

1 个答案:

答案 0 :(得分:1)

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

int poppedValue = *(lastStackEl->value);

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

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

int poppedValue = (*lastStackEl)->value;