返回栈顶元素时,怎么知道返回的-1是栈顶元素,还是返回失败?↷( ó╻ò)(゚⊿゚)ツ(•'╻'• ۶)۶
所以不要轻易返回-1,除非你确定数据都是正整数才可以通过返回-1表示失败
如果数据可以是任意的,那么你可以参考scanf是怎么给变量赋值的
在参数位置返回一个值,函数返回值再返回一个值,这样一次可以返回多个值,分别代表元素和故障码
也可以栈溢出时抛出一个异常,通过try,catch进行处理
int pop()
可以修改成
bool pop(int* ret)
结果由参数传递,返回值表示操作是否成功
在C语言中,当函数返回一个值为-1时,需要结合函数的返回值类型和调用函数时的数据类型来判断该值的含义。如果函数的返回值类型为int或者其他数值型数据类型,那么可以将返回值的-1看作是函数执行失败的返回值,而不是栈顶元素。如果函数返回值类型为指针类型,那么可能需要考虑指针所指向的地址是否为-1,以判断返回值的含义。
对于更好地判断返回值的含义,可以通过函数的返回值类型定义一个自定义的枚举,将函数返回值可能的含义都列举出来,增加代码可读性和可维护性。例如:
enum Result { SUCCESS = 0, FAILURE = -1, STACK_TOP = -2, // ... };
在函数执行结束时,根据具体情况返回不同的枚举值,利用枚举值来判断函数的成功或者失败,而不是根据具体的数值来判断。例如:
enum Result test() { if (stackIsEmpty()) { return STACK_TOP; } if (someFailedCondition()) { return FAILURE; } // ... return SUCCESS; }
在调用test函数时,可以根据返回值的具体枚举值来判断函数的返回结果,从而避免了因为返回值为-1而产生的歧义和错误判断。