我有这段 C 代码,我确信它不会工作,但它确实有效。
#include <stdio.h>
int* find (int* a, int val) {
if (*a == val)
return a;
else
find(a+1, val);
}
int main() {
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int *b;
b = find(a, 7);
printf("%d\n", *b);
return 0;
}
当然,我收到了 gcc 的警告,因为它在 find
函数的 else 分支中缺少 return 语句。但是,它工作得很好。
为什么会这样?它怎么知道通过递归函数返回一个int呢?当然,最后一次调用返回一个 int,但我是在 void 上下文中调用它。
最佳答案
此代码不是有效的 C 代码,此类代码的行为未定义。
它起作用的一个原因可能是在find
中最后一次调用之后没有操作,这可能导致递归调用的返回值停留在return中注册(可能是eax)。
但同样 - 行为未定义。
关于c - 这个 C int 函数在没有 return 语句的情况下如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14753444/