解决-表达式必须具有结构或联合类型,但它具有类型 “struct Node *“

使用结构体定义链栈

typedef struct Node {
	int data;
	struct Node* next;
}LinkStack;

初始化

void initStack(LinkStack* S) {
	S = (LinkStack*)malloc(sizeof(LinkStack));
	S->data = 0;
	S->next = NULL;
}

这里 笔者取栈顶元素时,使用如下内容,报错 

int GetTop(LinkStack S, int* data) {
	if (isEmpty(S)) {
		return 0;
	}
	else {
		*data = S.next.data;
        return 1;
	}
}

出现 表达式必须具有结构或联合类型,但它具有类型 "struct Node *" 的报错信息。

原因是因为next是结构体LinkStack类型里的指针成员,指向结构体LinkStack类型,不能对它用圆点运算符。因此应用S.next->data。将栈顶元素取出来。

正确写法

int GetTop(LinkStack S, int* data) {
	if (isEmpty(S)) {
		return 0;
	}
	else {
		*data = S.next->data;
		return 1;
	}
}

猜你喜欢

转载自blog.csdn.net/knighthood2001/article/details/130787254