我有这个 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 上下文中调用它。