C语言中的指向结构体的指针指向指针。

3

我正在使用指针和结构体在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个回答

2
根据运算符优先级,间接引用(解引用)运算符(*)比成员访问运算符(->)的优先级低。因此,如果没有显式括号,您的语句的行为类似于
int poppedValue = *(lastStackEl->value);

现在,由于lastStackEl是指向element的指针的指针,因此它不能用作成员访问运算符的LHS。这就是错误信息的含义。
您需要先解引用lastStackEl(以获取element*类型),然后再使用->来访问成员value。您应该编写:
int poppedValue = (*lastStackEl)->value;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接