c语言用函数做参数 c语言有参数函数调用例子

【C语言】函数作为函数参数Question:在函数void function()中,需要将另外一个函数double input()的函数名作为参数 。
typedef double (*P)(int);
Note:参数部分需要注意,函数input()所有的输入参数类型都需要包含在内 。
例如 double input(double u[5], int num, double x), 则在定义时写作 typedef double (*P)(double*,int,double) 。
此时,函数作为一种类型,可以直接被其他函数调用 。
函数声明中定义 void function(P input) , 调用function(input)即可 。
也可以写成
C语言 将函数名作为参数被另外一个函数调用要将函数名作为参数c语言用函数做参数,需要使用函数指针 。
函数指针c语言用函数做参数的定义格式为
ret_type
(*var_name)(arg_list);
表示返回值为ret_typec语言用函数做参数 , 参数列表为arg_list的函数指针var_name.

int
(*p)(int,int);
表示返回值为int,参数为两个int型的函数指针p 。
以函数指针作为形参c语言用函数做参数 , 即可实现函数名作为参数 , 由另一个函数调用 。

void func(int (*a)(int))
{
int r = 100l;
(*a)(r);
}即可传入函数指针,并以r为参数,调用该指针指向的函数 。
C语言中用函数做函数的形式参数的问题给你举个例子吧,这样就容易理解得多 。
例子:设计一个函数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(xy?x:y);
}
int
min(int
x,int
y)
{
return(xy?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();
}
c语言中用函数做参数怎么用数组元素就是下标变量c语言用函数做参数,它与普通变量并无区别 。因此它作为函数实参使用与普通变量是完全相同c语言用函数做参数的,在发生函数调用时,把作为实参c语言用函数做参数的数组元素的值传送给形参 , 实现单向的值传送 。【例5-4】说明c语言用函数做参数了这种情况 。

推荐阅读