C语言学习(六)指针4 指向函数的指针

来源:互联网 发布:2017广电总局网络电视 编辑:程序博客网 时间:2024/05/22 07:44

指向函数的指针


1.一个函数在编译时被分配一个入口地址。这个函数的入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。


例如:比较2个数字,返回大的数字:

void main() {

int swap(int a,int b);

int a,b,max;

a= 5;

b= 4;

    int(*p)(int,int);  /*用来定义p是一个指针函数的指针变量,该函数有两个整形参数,返回值为整形,括号不可省略。*/

    p= swap;             /*将函数的入口地址赋值给指针变量p,函数名代表该函数的地址*/

    max = (*p)(a,b); /*以指针形式调用函数*/

printf("%d\n",max);

}


int swap(int a,int b) {

int tem;

tem= a > b ? a : b;

return tem;

}


说明:

a)指向函数的指针变量的定义形式为:

返回类型(*指针变量名)(参数列表);


b)在一个程序中,一个指针变量可以先后指向同类型的不同函数。


c)在给指针函数赋值的时候只需要函数名。

d)函数指针++,--运算无意义。



2.函数指针变量通常的用途之一是把指针作为参数传递到其他函数中。


简述如下:有一个函数sub,它有两个参数x1,x2。定义x1x2为指向函数的指针变量。在调用函数sub时,实参为两个函数f1f2,给形参传递的是f1f2的地址。这样在函数中就可以调用f1f2函数了。


实参函数名        f1                   f2


void sub(int (* x1) (int),int (* x2) (int int)) {

int a,b,i,j;

a= (*x1)(i);

b= (*x2)(i,j);

}


应用场景:如果每次在调用sub函数时,要调用的函数不是固定的,这次调用f1f2,而下次要调用f3f4。这时只要在每次调用sub函数时给出不同的函数名作为实参即可,sub函数不必做任何修改。这种方法符合结构化程序设计方法原则,在程序设计中经常使用。

例如:设计一个函数,输入ab,第一次调用输出大的数,第二次调用输出小的数,第三次调用输出两个数的和。


void main() {

int max(int,int);

int min(int,int);

int add(int,int);

int process(int,int,int (*p)(int,int));


int a,b,tem;

a= 5;

b= 8;


tem= process(a,b,max);

printf("maxis %d \n",tem);


tem= process(a,b,min);

printf("minis %d \n",tem);


tem= process(a,b,add);

printf("addis %d \n",tem);

}


int max(int a,int b) {

int tem;

tem= a > b ? a : b;

return tem;

}



int min(int a,int b) {

int tem;

tem= a > b ? b : a;

return tem;

}


int add(int a,int b) {

int tem;

tem= a + b;

return tem;

}


int process(int a,int b,int (*p)(int,int)) {

int tem;

tem= (*p)(a,b);

return tem;

}



输出:

maxis 8

minis 5

addis 13 


文章链接:http://blog.csdn.net/murongshusheng/article/details/8690697




原创粉丝点击