栈的一条语句看不懂

来源:百度知道 编辑:UC知道 时间:2024/06/08 16:53:28
typedef struct stack_st
{
……
}STACK;
STACK mystack;
void initstack(STACK &stack)这句有点看不懂唉!
{
……

那个“STACK &stack”是什么意思啊,&不是取地址的吗?

是取地址。相当于 **stack 的作用一样。
void initstack(STACK &stack){
……

用取地址,&stack,在调用时对stack 改变时,则调用返回后也相应改变。
若是用 *stack作参数
void initstack(STACK *stack){
……
}则调返回后,stack 和调全前一样,不改变。
因此插入、删除等需要改变,就用&stack,而只读的就用 *stack传递

void initstack(STACK &stack)
STACK,这个你前面已经有语句typedef struct{}STACK;这说明STACK是一个结构类型,比如int,是一种数据类型.
stack这是传递给函数initstack()的,&stack是按引用传递,传递实参,举例如:
int main()
{
STACK s;
initstack(s);
.....
}
相当于stack是s的引用,函数中对stack的操作实际上就是对s的操作.

void initstack(STACK stack)
如果函数参数是这种类型,称为按值传递,当传递参数s给它时,首先将s生成一个拷贝s',再将s'传递给函数,所以函数中对stack的操作,实际上是对s'的操作,而不是对s的操作.

还有void initstack(STACK *stack)
这个是按地址传递,,,具体的你还是看书吧,

晕倒,在实际实现的时候不会这样写的,这只是数据结构为了说明形参是引用型参数的一种强调写法,引用型参数就是说,在调用的时候会改变这个值,所以在这里面强调一下,具体你可以在网上查一下"引用型参数"加深理解,你在用语言实现的时候要这样写:

int main()
{STACK mystack;
.....
initstack(&mystack); //调用,把mystack的地址传给inits