Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数在c中不能返回null_C_Null_Stack - Fatal编程技术网

函数在c中不能返回null

函数在c中不能返回null,c,null,stack,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"); r

我的代码应该将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;
}
下面是我得到的错误:
错误:从不兼容的函数返回“void*”
结果类型“堆栈”(也称为“结构堆栈”)
返回NULL


我不知道这是什么意思。我怎么修理它?堆栈的空等价物是什么?

问题是函数必须返回类型为
堆栈的值

您提供的代码没有定义
NULL
的类型,但是,由于您没有看到另一个错误并且正在将其分配给
节点
,因此我猜
NULL
的类型是
StackNode*
。。。或者,至少是与之相适应的东西

这就是你的问题。当函数声明返回一个
堆栈时,您正试图返回类型为
StackNode*
的内容


您最好重新设计此函数,该函数返回的是
推送操作的结果,而不是
堆栈本身。

可能有一些基本问题需要重新考虑: 首先,只有指针可以是
NULL
,而不是对象。因此,如果返回类型为
struct Stack
(不是指针)的对象,则不能返回
NULL
,而只能返回
struct Stack
的实例


其次,通过值传入并返回
struct Stack
的对象将导致复制相应的对象;我认为传递引用或指针将是一个更好的选择;并且-如果传入并返回指针,还可以返回
NULL
以指示堆栈已满或其他问题

错误消息中有什么不清楚?
NULL
Stack
类型的值吗?我不知道堆栈的NULL等价物是什么。没有等价物。您的函数和方法必须重新设计。例如,return
bool
,这将指示成功/失败。@ashadeka:这由您决定。为什么您甚至试图通过值传递和返回堆栈?这毫无意义。您需要对传递(和返回)方法进行彻底的重新设计。“您提供的代码没有定义NULL的类型,但是,由于您没有看到另一个错误并且正在将其分配给node,因此我猜NULL的类型是StackNode*…或者至少是与之兼容的。”NULL由实现提供,当然也不会是一个
StackNode*
。它通常是
0
,或
(void*)0
。它是C和C++的一部分,很可能是的…但是
NULL
只有在包含定义它的标题时才被定义为
(void*)0
。OP的完整代码包含该标题的可能性要比OP试图创建自己的
NULL
而未能实际编写所述定义或甚至向我们提及该定义的可能性高出几个数量级。