从c中的整数函数返回NULL

时间:2016-12-17 05:11:19

标签: c function 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;
    }
}

如果NULLcurrent > n,我希望函数返回true

2 个答案:

答案 0 :(得分:3)

在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;
}

答案 1 :(得分:3)

  

[H]我是否从整数结果类型函数返回NULL?

你不是。 sendto(sock, buf.data(), buf.size(), 0, (struct sockaddr *)&addr, sizeof(addr)); 是表示类型NULL的值的宏。它不是void *,因此返回int的函数无法返回int

现在,可以转换 NULL或任何其他指向NULL类型的指针,但这种转换的结果是有效的,普通的{{1} }。你似乎在寻找某种显着的价值,但除非你自己保留这样的价值,否则没有可用的东西。例如,您可以为此目的保留int。在内置类型中,只有指针类型提供通用的区分值(空指针)。

为了让您的函数向调用者发出失败信号,您可以选择保留一个值。最常见的一种方法是使用函数的返回值 only 来报告调用的成功或失败,并提供任何输出 - 在您的情况下是一个节点&#39> s value - 通过指针参数:

int