函数式编程指针-函数指针的一例子,求教?

问题描述

函数指针的一例子,求教?

#include
int max(int,int);

void main()
{
int a=2,b=3;
int(*pmax)(int,int);
pmax=max;
printf("max is %dn", (*pmax)(a,b));
}
int max(int x , int y)
{
return x>y?x:y;
}
输出语句里调用max函数时(*pmax)(a,b)或(pmax)(a,b)都是正确的这是怎么回事???

解决方案

例如:void (*fptr)();
把函数的地址赋值给函数指针,可以采用下面两种形式:
    fptr=&Function;
    fptr=Function;
取地址运算符&不是必需的,因为单单一个函数标识符就标号表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。
可以采用如下两种方式来通过指针调用函数:
    x=(*fptr)();
    x=fptr();
第二种格式看上去和函数调用无异。但是有些程序员倾向于使用第一种格式,因为它明确指出是通过指针而非函数名来调用函数的。

解决方案二:

写法问题而已
参考

你帖子的回复

解决方案三:

http://bbs.csdn.net/topics/390986017

解决方案四:

int (*pFunction)(float,char,char)=NULL;

给函数指针赋值,就是为函数指针指定一个函数名称。这个过程很简单,下面是两个例子:

int func1(float f,int a,int b){return f*a/b;}
int func2(float f,int a,int b){return f*a*b}

然后我们给函数指针pFunction赋值:
pFunction=func1;
pFunction=&func2;

上面这段代码说明了两个问题:
(1)一个函数指针可以多次赋值(想想C++中的引用)
(2)取地址符号是可选的,却是推荐使用的。
我们可以思考一下为什么取地址符号是可选的,在普通的指针变量赋值时,如上面所示,需要加取地址符号,而这里却是可选的?这是由于要同时考虑到两个因素(1)避免二义性(2)形式一致性。在普通指针赋值,需要加取地址符号是为了区别于将地址还是将内容赋给指针。

而在函数赋值时没有这种考虑,因为这里的语义是清晰的,加上&符号是为了和普通指针变量一致---“因为一致的时候就不容易出错”。

最后我们来使用这个函数:

pFunction(10.0,’a’,’b’);
(*pFunction)(10.0,’a’,’b’);

上面这两种使用函数指针调用函数的方式都是可以的,原因和上面一样。

原地址:http://hipercomer.blog.51cto.com/4415661/792300

解决方案五:

int (*pFunction)(float,char,char)=NULL;

给函数指针赋值,就是为函数指针指定一个函数名称。这个过程很简单,下面是两个例子:

int func1(float f,int a,int b){return f*a/b;}
int func2(float f,int a,int b){return f*a*b}

然后我们给函数指针pFunction赋值:
pFunction=func1;
pFunction=&func2;

上面这段代码说明了两个问题:
(1)一个函数指针可以多次赋值(想想C++中的引用)
(2)取地址符号是可选的,却是推荐使用的。
我们可以思考一下为什么取地址符号是可选的,在普通的指针变量赋值时,如上面所示,需要加取地址符号,而这里却是可选的?这是由于要同时考虑到两个因素(1)避免二义性(2)形式一致性。在普通指针赋值,需要加取地址符号是为了区别于将地址还是将内容赋给指针。

而在函数赋值时没有这种考虑,因为这里的语义是清晰的,加上&符号是为了和普通指针变量一致---“因为一致的时候就不容易出错”。

最后我们来使用这个函数:

pFunction(10.0,’a’,’b’);
(*pFunction)(10.0,’a’,’b’);

上面这两种使用函数指针调用函数的方式都是可以的,原因和上面一样。

原地址:http://hipercomer.blog.51cto.com/4415661/792300

解决方案六:

点了一次,发了2遍,还没有删除按钮。
csdn这个功能做的真鸡肋。
作用和论坛也很像啊。

时间: 2024-10-31 15:22:52

函数式编程指针-函数指针的一例子,求教?的相关文章

【C/C++学院】0726-cppIDE/一级指针/指针数组/函数指针/函数指针数组/二级指针

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. cppIDE 使用mfc和codeblocks中的mingw编译器.执行system命令中的bat批处理脚本. 一级指针 指针,结构体struct,

C/C++中函数指针的含义

函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢? 如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址. 定义一个指向函数的指针用如下的形式,以上面的test()为例: int (*fp)(int a);//这里就定义了一个指向函数的指针 函数指针不能绝对不能指向不同类型,或者是带不同形参的函数,在定义函数指针的时候我们很容易犯如下的错误. int *fp(int a);//这里是错误的,因为按

C++中的函数指针与函数对象的总结

以下是对C++中的函数指针与函数对象的使用进行了详细的分析介绍,需要的朋友可以参考下   篇一.函数指针函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址. 函数指针的用途是很大的,主要有两个作用:用作调用函数和做函数的参数. 函数指针的声明方法:数据类型标志符 (指针变量名) (形参列表): 一般函数的声明为: int func ( int x );而一个函数指针的声明方法为:int (*func) (int x);前面的那个(

C++中的函数指针和函数对象总结

篇一.函数指针函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址.函数指针的用途是很大的,主要有两个作用:用作调用函数和做函数的参数.函数指针的声明方法:数据类型标志符 (指针变量名) (形参列表):一般函数的声明为: int func ( int x );而一个函数指针的声明方法为:int (*func) (int x);前面的那个(*func)中括号是必要的,这会告诉编译器我们声明的是函数指针而不是声明一个具有返回型为指针的函

一般函数指针和类的成员函数指针深入解析_C 语言

函数指针是通过指向函数的指针间接调用函数.函数指针可以实现对参数类型.参数顺序.返回值都相同的函数进行封装,是多态的一种实现方式.由于类的非静态成员函数中有一个隐形的this指针,因此,类的成员函数的指针和一般函数的指针的表现形式不一样. 1.指向一般函数的指针函数指针的声明中就包括了函数的参数类型.顺序和返回值,只能把相匹配的函数地址赋值给函数指针.为了封装同类型的函数,可以把函数指针作为通用接口函数的参数,并通过函数指针来间接调用所封装的函数.下面是一个指向函数的指针使用的例子. 复制代码

C语言结构体中的函数指针

引言 指针是C语言的重要组成部分, 于是深入理解指针并且高效地使用指针可以使程序员写出更加老练的程序.我们要记住指针是一个指向内存地址的变量.指针可以引用如int.char--常见的数据类型,例如: int * intptr; // 声明一个指向整型值的指针 int intval = 5 ; // 定义一个整型变量 intptr = & intval ; // intptr现在包含intval的地址 指针不仅仅指向常规的类型还可以指向函数 函数指针 函数指针的内容不难理解,不再赘述,参见<C

c++函数指针和回调函数示例_C 语言

1.函数指针 函数指针是一个指针,只是这个指针它不像普通的指针指向是是一个变量,此时它指向的是一个函数,也就是它存储的是一个函数的地址,如果我们改变它的值,让它所指向的地址由指向funA转变为指向funB,那么这个函数指针的作用就改变了. 2.回调函数 什么是回调函数呢?回调函数其实就是一个通过函数指针调用的函数!假如你把A函数的指针当作参数传给B函数,然后在B函数中通过A函数传进来的这个指针调用A函数,这就是回调机制.B函数就是回调函数. 3.函数指针的使用 3.1函数指针声明 typedef

函数指针与函数声明

问题:当计算机启动时,硬件将调用首地址为0的子例程,为了模拟开机启动时的情形,如何设计出一个C语句,以显示调用该子例程. 换个问法:有一段程序存储在起始地址为 0的一段内存上,如果我们想要调用这段程序,请问该如何去做?  <C陷阱与缺陷>给出答案:(*(void(*)())0)();   相关知识:函数指针 函数指针是指向函数的指针变量,即本质是一个指针变量. 在C语言中规定,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址.我们可以把函数的这个首地址(或称入口地址)赋予

函数指针

函数指针 函数指针指向的是函数而非对象.和其他指针一样,函数指针指向某种特定类型.函数的类型由它的返回类型和形参类型共同决定,与函数名无关.例如: //比较两个string对象的长度 bool lengthCompare(const string&,const string&); 该函数的类型是bool(const string&,const string&).要想声明一个可以指向该函数的指针,只需要用指针替换函数名即可: //pf 指向一个函数,该函数的参数是两个cons