重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
成都创新互联,为您提供网站建设公司、网站制作、网站营销推广、网站开发设计,对服务成都围栏护栏等多个行业拥有丰富的网站建设及推广经验。成都创新互联网站建设公司成立于2013年,提供专业网站制作报价服务,我们深知市场的竞争激烈,认真对待每位客户,为客户提供赏心悦目的作品。 与客户共同发展进步,是我们永远的责任!
函数指针有两个用途:调用函数和做函数的参数。
函数指针的声明方法为:
返回值类型 ( * 指针变量名) ([形参列表]);
如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f = func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
下面的程序说明了函数指针调用函数的方法:
#includestdio.h
int max(int x,int y){return (xy? x:y);}
int main()
{
int (*ptr)(int, int);
int a, b, c;
ptr = max;
scanf("%d%d", a, b);
c = (*ptr)(a,b);
printf("a=%d, b=%d, max=%d", a, b, c);
return 0;
}
当左边是个对象时用“.”
当左边是个指向对象的指针时用“-”
比如,Class A;
Class *B=A;
A有函数myfun()
则调用时用
A.myfun();
B-myfun();
main()
{int x,n;
scanf("%d%d",x,n);
pn(x,n);
printf("%d",pn); //你这里写的不正确,你把pn当作返回值了,其实它是个函数指针,printf的第二个参数可以是指针也可是值,所以编译可以通过,若显示也显示的是pn这个函数的地址值
}
/////////////////可以这样写,用个变量p做传递
main()
{int x,n;
int p;
scanf("%d%d",x,n);
p=pn(x,n);
printf("%d",p); //用p做传递
}
--------------------------------------
是这样的,我又仔细看了
#includemath.h
pn(int x,int n)
{int p;
if(n==0) p=1;
if(n==1) p=x;
if(n=1) p=((2*n-1)*x-pn(x,n-1)-(n-1)*pn(x,n-2))/n;
return p;
} //这个会比较三次,尤其是n=1时,p=x,又进行了p=1的调用,结果就错啦,试着把n=1的''去掉
pn(int x,int n)
{int p;
if(n==0) return(1);
if(n==1) return(x);
if(n=1) return(((2*n-1)*x-pn(x,n-1)-(n-1)*pn(x,n-2))/n);
} //这个比较的次数和值n有关
另外,虚机团上产品团购,超级便宜
#includestdio.h
//定义类型fun_ptr,它是一个函数指针,指向的函数返回值为int,参数为int
typedef int (*fun_ptr)(int);
//fun1
int fun1(int a)
{
printf("call fun1,pram=%d,return %d+1\n", a, a);
return a+1;
}
//fun2
int fun2(int a)
{
printf("call fun2,pram=%d,return %d+2\n", a, a);
return a+2;
}
int main(int argc, char *argv[])
{
int a = 10;
int s = 0;
//定义函数指针类型的变量p_fun
fun_ptr p_fun;
//指向fun1
p_fun = fun1;
//执行
s=p_fun(a);
printf("s=%d\n", s);
//指向fun2
p_fun = fun2;
//执行
s=p_fun(a);
printf("s=%d\n", s);
return 0;
}
执行结果: