函数指针的2个例子

来源:互联网 发布:ubuntu启动输入法 编辑:程序博客网 时间:2024/05/29 11:56
第一个是我写的程序:

//函数指针的用法

//---------------------Include Files-------------

#include <stdio.h>

#include <math.h>

//-----------------end Include Files-------------

double BISECTION(double x0, double (*funcptr)(double));

double func(double x)

{

return ( x * x );

}

int main()

{

printf("%lf/n", BISECTION(2.0, func));//func前加取地址号&也可以

return 0;

}

double BISECTION(double x0, double (*funcptr)(double))

{

return  (*funcptr)(x0);//return funcpstr(x0)也能执行

// return funcpstr(x0);//不加*号和括号出现外部链接的错误,但不应该出现错误啊??

//在VS2005中,不加*号和括号可以顺利执行

}

 

另一个是改写自参考书上的程序

//函数指针的用法

//---------------------Include Files-------------

#include

#include

//-----------------end Include Files-------------

typedef double (*funcptr) (double);

double func(double x)

{

return ( x * x );

}

int main()

{

double y = 2.0;

int x;

funcptr fp;

funcptr function[6] = {func, sin, cos, tan, log, exp};

printf("Enter x, which lies between 0 to 5: ");

scanf("%d", &x);

fp = function[x];

// fp = &func;

// fp = func;//这两种写法都可以调用func函数

printf("%lf/n", fp(2));

printf("%lf/n", (*fp)(2));

return 0;

}

//本程序改写自《C语言程序设计实用教程(Applied C: An Introduction and More)》,[美]

//Alice E. Fischer, David W. Eggert等著,裘岚、张晓芸等译,电子工业出版社,

//2001年9月第1版, 第622页程序

//"由于fp是一个指针,*fp表示fp所指向的函数,(*fp)(x)以实参x调用该函数,因此(*fp)(x)是

//合法并有意义的语句。C语法允许仅使用函数指针,而无需写星号和括号",摘自上书

原创粉丝点击