下面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 的返回值进行判断。
 
                    

![[小白求帮助]分配的内存什么时候需要手动释放](https://www.codebye.com/wp-content/themes/douth/timthumb.php?src=https://www.codebye.com/wp-content/themes/douth/assets/img/pic/10.jpg&h=110&w=185&q=90&zc=1&ct=1)