问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言中用函数做函数的形式参数的问题

发布网友 发布时间:2022-05-04 17:28

我来回答

3个回答

热心网友 时间:2022-06-24 09:17

给你举个例子吧,这样就容易理解得多。
例子:设计一个函数func();在调用它时每次实现不同的函数功能,输入两个参数a和b,第一次调用func()时找出a和b中的较大者,第二次调用找出较小者,第三次调用求a和b之和。
说明:格式
(*p)()
表示定义一个指向函数的指针变量p,在c语言中这个格式是固定的,前面的()表示p先和*结合,是指针变量,后面的()表示p指向一个函数。前面的()不能省略,如果写成
*p(),由于()优先级比*高,那就表示p()函数返回的是一个指针,p本身就是函数不是指针了,意思完全变了。
任何一个函数,函数名就是该函数的入口地址(起始地址),也就是说函数名就是个地址,从这个地址开始,函数占用一段内存单元。因此可以用一个指针变量来指向这个这个函数名,这样就相当于指向这个函数了。所以下面的max,min,add函数都是一个地址,分别调用时就是赋值p=max,p=min,p=add,也就是(*p)(x,y)分别就等于max(x,y),min(x,y),add(x,y).
程序在win-tc和Dev-c++下调试通过。
#include
<stdio.h>
#include
<conio.h>
int
max(int
x,int
y)
{
return(x>y?x:y);
}
int
min(int
x,int
y)
{
return(x<y?x:y);
}
int
add(int
x,int
y)
{
return(x+y);
}
int
func(int
x,int
y,int
(*p)())
/*定义指向函数的指针变量p,关键1*/
{int
result;
result=(*p)(x,y);
/*调用相应函数,函数名即地址给p,这样p指向该函数,关键2*/
printf("%d\n",result);
}
main()
{
int
a,b;
printf("Please
input
two
integers
a
and
b:\n");
scanf("%d%d",&a,&b);
printf("max=");
func(a,b,max);/*相当于赋值p=max*/
printf("min=");
func(a,b,min);/*相当于赋值p=min*/
printf("add=");
func(a,b,add);/*相当于赋值p=add*/
getch();
}

热心网友 时间:2022-06-24 09:17

可以使用函数指针,比如:
void
function(int
x,void
(*visit)())/*没有返回值,没有参数*/
{
/*其他代码*/
visit();
}
void
function(int
x,void
(*visit)(int))/*没有返回值,有整形参数*/
{
int
y
=
x*x;
/*其他代码*/
visit(y);
}

热心网友 时间:2022-06-24 09:18

用函数指针应该能解决吧,以下是我写的一个例子,TC编译通过:
int
test1(int
i)
{
return
i;
}
int
test2(int
a,int
(*fp)(int
a))
{
return
fp(a);
}
main()
{
printf("%d",test2(5,test1));
getch();
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
胶原蛋白线双眼皮是不是永久性 双眼皮埋线是蛋白质还是尼龙绳-双眼皮埋线蛋白线多久能吸收 人体输液的“港口”完全植入式输液港 双眼皮宽变窄修复的方法 同心保家庭重疾险靠不靠谱?便宜吗? 做完双眼皮一宽一窄怎么办 喝全脂奶粉对长高有没有什么好处? redmine中“选择一个项目..."下拉列表框中为什么只列出一个项目,我建... 南充市龙门中学实力现在怎样?他的奥赛班是重点班么? 感情中为什么总是不知足呢? 怎么用电炖锅做莲子银耳百合粥 我梦见死人给我腾让铺位请周公觧梦 银耳、莲子、百合粥怎么做先后是怎么放的 银耳小米百合莲子粥的做法 空的多音字 淮阴区香港路地块划分 typedef int (*FP)(); 是什么意思~~ 请问“腾退”和“拆迁”这两个名次有什么区别? R2A15112FP和R2A15112FP-A有什么区别? 租户赖着不走能把物品强行搬出吗 关于C语言的题 容声Bcd-423wd11FPA变频四门冰箱。冷藏不冷。工作原理? 康园fpa672折叠车架怎么样 农村宅基地物权纠纷,二审维持原判,要求我们腾让,对方申请了强制执行,请问这种情况会怎样执行? 已经定义fp是一个函数指针,这两种调用有什么区别? fp(a,b) (*fp)(a,b) 人民法院的查封行为是否可以成为拒绝腾让理由? FP & A Supervisor什么意思 白对虾多少头什么意思 厄瓜多尔白虾好吃吗?大概多少钱一斤? 腾让土地是什么意思 逗女朋友开心的笑话 法院上法官判决时说的话 C语言问题,为什么错了? #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; void main() { char c; FILE *fpa,*fpb; i 银耳百合莲子粥的做法的功效与作用 在法院拍卖的房子里面有人住,法院不负责清场,怎么办 tpipc586fp-a忘记密码 银耳百合莲子粥的家常做法 fp英文是什么意思 逗女朋友开心的笑话情话 A FP与脂肪肝有关系吗 C语言怎么处理*fp可能等于‘0’? 银耳百合莲子粥的做法,银耳百合莲子粥怎么做 做职业金融理财师,需要考哪些证书A FP,还是C F P? 项目工程总结怎么写? 资料分析中常见折线图怎么去观察 在游戏。电脑的任务管理器怎么打开 南京一中学考场门前用冰块降温,这种传统的降温方式与空调相比,哪个更好? 空调扇是怎么使用冰块吹出冷风的,怎么样使用水让电风扇吹出冷风。 冰块加食盐,室温瞬间下降11℃,真的可以当空调用吗 什么设备是用冰块达到空调目的的