猿问

请看下面的代码,是关于push(S,*p)函数的

int Push(SqStack &S, BiTNode e)
{
if (S.top -S.base >=S.stacksize )
{
S.base =(BiTNode*)realloc(S.base ,(S.stacksize +10)*sizeof(BiTNode ));
if (!S.base )exit(2);
S.top =S.base +10;
S.stacksize +=10;
}
*S.top++=e;
return 0;
}
当Push(S,*p)当指针P为空的时候 为什么会发生错误 怎么取解决 谢谢 BiTNode 为一个二叉树的结构体 SqStack 为栈

潇湘沐
浏览 471回答 2
2回答

德玛西亚99

if(!p)//如果这里不加判断,*p操作会出错{Push(S,*p)}

狐的传说

&是取结构体S的地址,因为c语言的函数传的是形参的值拷贝,所以如果不加&,那么你在函数里面对S的操作其实是对一个临时结构体的操作。例子struct A{int i;};struct A x;x.i=0;void fun1(A y){y.i=1}void fun2(A& py){(*py).i=2;}//调用fun1(x);没用x.i还是0fun2(&x);有用x.i是10
随时随地看视频慕课网APP

相关分类

Java
JavaScript
我要回答