Zag*_*rax 1 c recursion return
我有这个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;
}
Run Code Online (Sandbox Code Playgroud)
当然,我从gcc收到警告,因为它在find函数的else分支中缺少return语句.但是,它完美地运作.
为什么会这样?如何通过递归函数返回int?当然,最后一次调用返回一个int,但我在void上下文中调用它.
此代码不是有效的C代码,并且未定义此类代码的行为.
它工作的一个原因可能是在最后一次调用之后没有操作,find其中可能导致递归调用的返回值保留在返回寄存器(可能是eax)中.
但同样 - 行为未定义.
| 归档时间: |
|
| 查看次数: |
1133 次 |
| 最近记录: |