我正在学习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 > n
,我希望函数返回true
。
答案 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