私はそれが機能しないと確信していたこの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;
}
もちろん、find
関数のelseブランチ内にreturnステートメントがないため、gccから警告が表示されます。ただし、完全に機能します。
なぜこれが起こるのですか?再帰関数を介してintを返すことをどのように知るのですか?もちろん、最後の呼び出しはintを返しますが、私はそれをvoidコンテキストで呼び出しています。