我正在使用链表创建一个堆栈(我只在推送部分)。我已将我的结构声明为
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(¤t, 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
。