我正在学习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
。
[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;
}