将函数名作为参数被另外一个函数调用 C言语 (函数名作为参数)

将函数名作为参数被另外一个函数调用 C言语 (函数名作为参数)

本文目录导航:

C言语 将函数名作为参数被另外一个函数调用

要将函数名作为参数,须要经常使用函数指针。

函数指针的定义格局为

ret_type (*var_name)(arg_list);

示意前往值为ret_type,参数列表为arg_list的函数指针var_name.

如

int (*p)(int,int);

示意前往值为int,参数为两个int型的函数指针p。

以函数指针作为形参,即可成功函数名作为参数,由另一个函数调用。

如

试剖析结构形容中,指针函数的说明与运用特点。

指针函数是指函数的前往值类型是一个指针类型,即实质是一个函数。

咱们知道函数都有前往类型(假设不前往值,则为无值型),只不过指针函数前往类型是某一类型的指针。

其定义格局如下所示:前往类型标识符 *函数称号(方式参数表){ 函数体 }前往类型可以是任何基本类型和复合类型。

前往指针的函数的用途十分宽泛。

理想上,每一个函数,即使它不带有前往某种类型的指针,它自身都有一个入口地址,该地址相当于一个指针。

比如函数前往一个整型值,实践上也相当于前往一个指针变量的值,不过这时的变量是函数自身而已,而整个函数相当于一个“变量”。

例如上方一个前往指针函数的例子:#include <stdio.h>float *find(float(*pionter)[4],int n);main(){static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}};float *p;int i,m;printf(Enter the number to be found:);scanf(%d,&m);printf(the score of NO.%d are:\n,m);p=find(score,m-1);for(i=0;i<4;i++)printf(%5.2f\t,*(p+i));}float *find(float(*pionter)[4],int n)/*定义指针函数*/{float *pt;pt=*(pionter+n);return(pt);}共有三个在校生的效果,函数find()被定义为指针函数,起形参pointer是指针指向蕴含4个元素的一维数组的指针变量。

pointer+n指向score的第n+1行。

*(pointer+1)指向第一行的第0个元素。

pt是一个指针变量,它指向浮点型变量。

main()函数中调用find()函数,将score数组的首地址传给pointer.【留意】指针函数不同于函数指针, int (*f)(int a);或许char (*f1)(void);函数指针申明为指针,它与变量指针不同之处是,它不是指向变量,而是指向函数。

函数指针有两个用途:调用函数和做函数的参数.

函数指针定义

函数指针:函数指针是指向函数的指针变量。

因此“函数指针”自身首先应是指针变量,只不过该指针变量指向函数。

这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。

如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。

有了指向函数的指针变量后,可用该指针变量调用函数,就似乎用指针变量可援用其余类型变量一样,在这些概念上是大体分歧的。

函数指针有两个用途:调用函数和做函数的参数。

函数指针的申明方法为:前往值类型 ( * 指针变量名) ([形参列表]);注1:“前往值类型”说明函数的前往类型,“(指针变量名 )”中的括号不能省,括号扭转了运算符的优先级。

若省略全体则成为一个函数说明,说明了一个前往的数据类型是指针的函数,前面的“形参列表”示意指针变量指向的函数所带的参数列表。

例如:int func(int x); /* 申明一个函数 */int (*f) (int x); /* 申明一个函数指针 */f=func; /* 将func函数的首地址赋给指针f */或许经常使用上方的方法将函数地址赋给函数指针:f = &func;赋值时函数func不带括号,也不带参数,因为func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。

注2:函数括号中的形参可有可无,视状况而定。

上方的程序说明了函数指针调用函数的方法:例一、#include<stdio.h>int max(int x,int y){return (x>y? 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;}ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实践上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数称号那样是死的,它可以指向任何函数,就看你想怎样做了。

在程序中把哪个函数的地址赋给它,它就指向哪个函数。

然后用指针变量调用它,因此可以先后指向不同的函数。

不过留意,指向函数的指针变量没有++和--运算,用时要小心。

不过,在某些编译器中这是不能经过的。

这个例子的补充如下。

应该是这样的:1.定义函数指针类型:typedef int (*fun_ptr)(int,int);2.申明变量,赋值:fun_ptr max_func=max;也就是说,赋给函数指针的函数应该和函数指针所指的函数原型是分歧的。

例二、#include<stdio.h>void FileFunc(){printf(FileFunc\n);}void EditFunc(){printf(EditFunc\n);}void main(){typedef void(*funcp)();funcp pfun=FileFunc;pfun();pfun=EditFunc;pfun();}

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

83阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

88阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

86阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

78阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读