我有這個C代碼,我確信它不會工作,但它確實。這個C int函數如何在沒有返回語句的情況下工作?
#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語句。但是,它完美地工作。
爲什麼會發生這種情況?它如何知道通過遞歸函數返回一個int?當然,最後一次調用返回一個int,但我在無效的環境中調用它。
什麼是'trova'? – asm
只要你拒絕告訴我們'trova'是什麼,你如何期待一個有意義的答案?就我們所知,它立即調用'exit(0);'。 –
它不編譯,程序中沒有'trova'函數定義。粘貼可編譯的測試代碼。 – ouah