用函数名f做实参,f本身包含的参数如何传递?

来源:百度知道 编辑:UC知道 时间:2024/06/01 13:57:49
hi大家好,这一块我总是倒腾不清楚,高手帮我看看,请看这段程序:
#include <stdio.h>

fan(int x)
{return 2*x;
}

ying(int (*f)(int),int x)
{return (*f)()+x; /*~~~~~~~~~~~~~*/
}

main()
{int a,(*p)(int);
p=fan;
a=5;b=2;
printf("%d", ying((*p)(b),a)); /*~~~~~~~~~~~~~~~~*/
}

算上main函数,总共有3个函数,现在在主函数中调用ying函数,而ying函数的形参也包含函数f,现在把p(即fan函数)作为实参传给f,此时p(即fan)的实参是b。
不知您能不能看明白我的意思?其实不用定义p也可以,纯粹为了熟悉概念。
加注释的两行,正确写法是什么呢?高手快来,谢谢啊!
pur_e您好!谢谢。我还想问一下:倒数第二行写成 printf("%d", ying(*p,a));运行也正常?也就是说*p和p结果都一样呢?

恩,我测试了一下,*p和p的内容是一样的,应该是为了可以写成p()的格式

#include <stdio.h>
int fan(int x)
{
return 2*x;
}
ying(int (*f)(int),int x)
{
return (*f)(x)+x; /*~~~~~~~~~~~~~*/
}
void main()
{
int a,(*p)(int);
p=fan;
a=5;
printf("%d", ying(p,a)); /*~~~~~~~~~~~~~~~~*/
}

应该这样写,不可能把实参同时传进去的,你可以给ying函数加一个参数当fan的参数

注释的格式就是 /*~~~~~~~~~~~~~*/啊!