下面C函数,输出的结果是
f2:f2:f2:2
f1只是用f2作为参数而已,实际上是调用f1,f2应该不会调用,
但是这里很奇怪,调用了f2函数
本人试了一下,把f1里面的while(f(n)) n++ 删掉
就不调用f2了,
这种情况应该怎么理解?
f2:f2:f2:2
f1只是用f2作为参数而已,实际上是调用f1,f2应该不会调用,
但是这里很奇怪,调用了f2函数
本人试了一下,把f1里面的while(f(n)) n++ 删掉
就不调用f2了,
这种情况应该怎么理解?
#include <stdio.h> int f1(int (*f)(int)); int f2(int); int main(){ printf("%d\n",f1(f2)); return 0; } int f1(int (*f)(int)){ int n = 0; while(f(n)) n++; return n; } int f2(int n){ printf("f2:"); return n*n-4; }
解决方案:20分
while( f(n) ) , 先调用函数 f, 然后对 f 的返回值进行判断。