猿问

这里StackNode *s如果换成LinkStack *s 会有什么错误吗?

typedef struct node
{
datetype date;
struct node *next;
}StackNode *LinkStack
下面是入栈操作:
LinkStack Push_LinkStack(LinkStack top,datetype x)
{
StackNode *s;
s=malloc(sizeof(StackNode));
s->date=x;【s->next=top;top=s;】
return top;
}
我只有一个问题。就是在我加【】的地方,前面s->next=top的意思是把名为LinkStack的指向node结构体的指针top内的地址赋给同样指向名为StackNode指向node结构体的next指针,这样top内为空即无地址,接下来又把指向StackNode的s指针内地址赋给top,这样top就又指向了名为StackNode的node结构体。这样最后就返回了一个名为StackNode的node结构体,但是函数本身是应该返回名为LinkNode的node结构体的啊?怎么回事?函数中的返回值跟函数本身应该返回的值是不一致的呢??

回首忆惘然
浏览 508回答 2
2回答

慕丝7291255

StackNode 和*LinkStack是同一个东西都是struct node型结构体typedef struct node{datetype date;struct node *next;}StackNode ,*LinkStack上面typedef给struct node又取了两个名字,StackNode 和*LinkStack,一个人可以有好几个名字、名字变了人没变,懂了没?

青春有我

这个是为了增加程序的可读性,比如LinkStack一看就是一个链栈,如果你用struct node定义,别人在看的时候还要返回看一下你这个struct node是什么东西,这个程序比较短,这种好处不是特别明显,如果你读一个几十甚至几百行的程序就会感觉到这种方法的好处了
随时随地看视频慕课网APP
我要回答