从c中的整数函数返回null



我正在学习C,用于Ruby中的编码。那么如何从整数结果类型函数中返回null?例如:

int valueOf(t_node *node, int n){
    int current = 0;
    int value;
    while (node -> next != NULL) {
        value = node -> val;
        if (current == n) {
            return value;
        }
        if (current > n) {
            return NULL;
        }
        node = node -> next;
        current += 1;
    }
}

我想要函数返回NULL如果current > ntrue

[h] ow我是否会从整数结果类型函数中返回null?

你不。NULL是一个宏代表void *类型的值。它不是int,因此返回int的功能无法返回NULL

现在,可以转换 NULL或任何其他指针type int,但是这种转换的结果是有效的普通 int。您似乎正在寻找某种杰出价值,但是除非您自己保留这样的价值,否则没有任何可用的价值。例如,您可以为此保留INT_MIN。在内置类型中,只有指针类型提供通用的杰出值(null指针)。

为您的功能提供向呼叫者发出失败的功能,您有几个保留值的替代方案。最常见的是,使用函数的返回值来报告通话的成功或失败,并通过指针参数传递任何输出(在您的情况下是节点的值):

int valueOf(t_node *node, int n, int *result) {
    int current = 0;
    while (current < n && node != NULL) {
        node = node->next;
        current += 1;
    }
    if (node == NULL) {
        // no such node -- return a failure code
        return 0;
    } else {
        // current == n
        *result = node->value;
        return 1;
    }
}

在c中,null只是0的同义词。因此,您实际上只需要这样做...

if (current > n) {
    return 0;
}

但是,null通常是指未定义而不是整数的指针值。在C中,整数值不是引用,因为它们在许多解释的语言中。它们是标量的,不能用指针隐式提及。

如果您想在当前> N时指示错误条件或未定义的行为,则必须提供一个单独的机制来指示该值不可用。通常,C函数将在错误上返回-1。由于您正在使用整数返回以获取一个值,这意味着有效值永远不会为-1。

看来您正在处理链接列表,并且要限制要检查的项目数。解决这可能是...

int valueOf(t_node *node, int n, int *val){
    int current = 0;
    int value;
    while (node -> next != NULL) {
        value = node -> val;
        if (current == n) {
            // This notation is for dereferencing a pointer.
            *val = value;
            return 0;
        }
        if (current > n) {
            return -1;
        }
        node = node -> next;
        current += 1;
    }
    // This method also gives you a way to indicate that
    // you came to the end of the list. Your code snippet
    // would have returned an undefined value if node->next == null
    return -1;
}

相关内容

  • 没有找到相关文章

最新更新