在C函数调用中返回空项

在C函数调用中返回空项,c,pointers,null,C,Pointers,Null,我想返回堆栈中的最后一个。如下所示: Item* get_last_item() { if (item_stack_size == 0) { // return <nothing> ? } else { return ItemStack[item_stack_size-1]; } } 对于返回指针的函数,空指针可以用作带外值(当然,调用方应该在取消引用指针之前检查指针是否为空): 通常,对于任何返回值或可能失败的函数,您

我想返回堆栈中的最后一个。如下所示:

Item* get_last_item()
{
    if (item_stack_size == 0) {
        // return <nothing> ?
    }  else {
         return ItemStack[item_stack_size-1];
    }
}

对于返回指针的函数,空指针可以用作带外值(当然,调用方应该在取消引用指针之前检查指针是否为空):



通常,对于任何返回值或可能失败的函数,您有两种选择:(1)返回“带外”值,或(2)返回与返回值分开的单独的成功/失败状态。这两种方法各有优缺点。对于指针,
NULL
是一个非常好的带外值,您可以使用它。对于字符,
EOF
。但是对于任意整数,通常没有一个值是不合法的。由于您的
get\u last\u item
函数返回指针,
NULL
可能是一个不错的选择——只要调用者总是仔细检查它@我明白了,谢谢。你想更详细地给出这两种情况的答案吗?不,不是现在,我应该在工作。:-)@史蒂文哈,好吧,很公平!可以自行返回
NULL
,还是需要
(Item*)NULL
?@samuelbrody1249在我的系统上(可能也在许多系统上)
NULL
定义为
((void*)0)
。截至:空指针常量可以转换为任何指针类型;这种转换会导致该类型的空指针值。
Item* get_last_item()
{
    return (item_stack_size != 0) ? ItemStack[item_stack_size-1] : (void*) 0;
}
Item *pop_last_item()
{
    if (!item_stack_size) {
        return NULL;
    }  else {
         return ItemStack[--item_stack_size];
    }
}