c-使用链表创建堆栈时出错



我正在使用链表创建一个堆栈(我只在推送部分)。我已将我的结构声明为

struct LinkedStack {
int data;
struct LinkedStack* next;
};

我有3个指向全局声明的LinkedStack的指针。

struct LinkedStack *first = NULL;
struct LinkedStack *previous = NULL;
struct LinkedStack *current = NULL;

main()中,我写下了这个

int data = 0, choice = 0;
if(current == NULL) {
printf("nNo Memory Allocated");
}
printf("n1. Push Data");
printf("n2. Pop Data");
printf("n3. Display The Stack");
printf("n4. Exit");
scanf("%d", &choice);
switch(choice) {
case 1:
printf("Enter the data:: ");
scanf("%d", &data);
push(&current, data);
break;
}

我写的推送功能是这个-

void push(struct LinkedStruct **s, int usrdata) {
if(first == NULL) {
first = *s;
}  
if(previous != NULL) {
previous->next = *s;
} 
*s->data = usrdata;
previous = *s;
*s->next = NULL;
}

但这会导致编译失败。错误为-

在非结构或union
在非结构或联合

并且这些错误的行号是这些行:

*s->data = usrdata;
previous = *s;
*s->next = NULL;

你能告诉我为什么会发生这种事吗?

"arrow"运算符的优先级高于取消引用运算符。因此,从编译器的角度来看,您已经编写了例如

*(s->data)=usrdata;

您需要使用括号:

(*s)->data=usrdata;

您应该使用s->data = usrdata(*s).data = usrdata

最新更新