我正在使用指针和结构在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;
弹出函数的第一行和第二行中的编译器给出错误:
error: request for member 'value' in something not a structure or union
int poppedValue = *lastStackEl->value;
按照运算符的优先级,间接(取消引用)运算符(*
)的出现晚于成员访问运算符(->
)的出现。因此,如果没有明确的括号,您的陈述将像
int poppedValue = *(lastStackEl->value);
现在,lastStackEl
作为指向element
它的指针的指针不能用作成员访问运算符的LHS。这就是错误消息的全部含义。
您需要先取消引用lastStackEl
(以获取element*
类型),然后才能使用->
访问成员value
。你应该写
int poppedValue = (*lastStackEl)->value;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句