函数不能在c中返回null

时间:2017-01-31 22:28:18

标签: c null stack

我的代码应该将StackNode项目推送到堆栈中。但是,当堆栈已满时,我试图让函数不再推送,并返回null,但它不会返回null!

Stack push(Stack stk,int data)
{
  struct StackNode *top = stk.top;
  struct StackNode *node = malloc(sizeof(struct StackNode));
  if(node == NULL)
  {
    printf("Stack is full\n");
    return NULL;
  }

  node->data = data;
  node->nextNode = top;
  stk.top = node;
  stk.count++;
  return stk;
}

以下是我得到的错误: error: returning 'void *' from a function with incompatible result type 'Stack' (aka 'struct Stack') return NULL;

我不确定这意味着什么。我如何解决它?什么是堆栈的NULL等价物?

2 个答案:

答案 0 :(得分:1)

也许你应该重新思考一些基本的东西: 首先,只有指针可以是NULL,而不是对象。因此,如果返回类型为struct Stack的对象(不是指针),则不能返回NULL而只返回struct Stack的实例。

其次,按值传入和返回struct Stack的对象将导致复制相应的对象;我认为传递引用或指针是更好的选择; - 如果你传入并返回一个指针,你也可以返回NULL来表示完整的堆栈或其他问题。

答案 1 :(得分:0)

问题是您的函数必须返回类型为Stack的值。

您提供的代码并未定义NULL的类型,但是,由于您没有看到其他错误,并且您将其分配给node,我会猜测NULL的类型是StackNode * ......或者至少是与此类似的东西。

所以,那就是你的问题。当您的函数声明返回StackNode *时,您尝试返回类型为Stack的内容。

您最好的选择是重新设计此函数,该函数返回push操作的结果,而不是Stack本身。