int InitStack(SqStack &S)
{
S.base = (int *)malloc(STACK_INIT_SIZE*sizeof(int));
if (!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
后者是我在网上找到的:
int InitStack(SqStack *S)
{
S->base = (int *)malloc(STACK_INIT_SIZE*sizeof(int));
if (!S->base) exit(OVERFLOW);
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return OK;
}
这两种写法的区别在于参数的类型和传递方式。
在第一种写法中,参数的类型是 SqStack &S,这是一种传引用的方式。即在函数调用时传递的是参数 S 的内存地址,函数内部可以直接操作原始变量 S 的值。
而在第二种写法中,参数的类型是 SqStack *S,这是一种传指针的方式。即在函数调用时传递的是参数 S 的指针,函数内部需要通过指针操作来修改原始变量 S 的值。
S.base 和 S->base 都表示结构体 SqStack 的成员 base 的值,S 和 S-> 是指向结构体的指针。
所以,在第一种写法中 S.base 表示的是结构体 SqStack 的成员 base 的值,而在第二种写法中 S->base 表示的也是结构体 SqStack 的成员 base 的值。