一道数据结构问题,请问:为什么栈抽象数据类型定义中,是InitStack(&s),而代码中是?

InitStack(s),就是说,为什么抽象数据类型定义中参数前面有&,而代码使用中就没有&了?谢谢指点

因为定义函数时的&表示参数是引用类型的,而调用函数时为引用类型的形参传递实参时,只需要传递变量名,前面不需要加&。如:
//定义
initStack(Stack &s)
{
//...
}
Stack s;
//调用
initStack(s);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-13
你好,这个就是传值和传址的区别啊。c语言里面讲了它们二者的区别。
你可以去复习一下它们的区别
简单的来说,传值不会改变变量的内容,比如StackEmpty(s)中,仅仅是对栈进行是否为空的判断,并不需要对Stack进行任何操作吧(如修改栈的大小,向栈中插入元素等)所以直接采用传值。
而InitStack(&s)中,对栈进行了操作(给栈分配了内存),类似的还有PopStack(&s),PushStac(&s),都对栈操作了,所以必须采用传址方式,相当于保存了操作的结果,如果采用传值方式,就没有“保存”操作结果,相当于没有进行对栈的操作追问

为啥代码中Push和Pop方法中没&符号

相似回答