二十、函数指针高级(动态调用)

1.动态调用是系统普遍支持的技术

2.要实现动态调用需要一个对应表

3.示例:使用函数名的字符表调用函数

函数名  函数指针

“max”   maxValue

“min”    minValue

“avg”    avgValue

4.动态调用

PFUN getFunctionFromName(char *name);

int getValue(int a , int b , char *name);

5.示例:

typedef int(*PFUN)(int , int);

//相当于把int (*)(int , int)改成PFUN

int sum(int a , int b );

int sum(int a , int b ){//加法函数

return a+b;

}

int maxValue(int x , int y);

int maxValue(int x , int y){//最大值函数

return x>y?x:y;

}

int minus(int x , int y);

int minus(int x , int y){//减法函数

return x-y;

}

typedef struct nameFunctionPair{//定义结构体

char name[20];

PFUN function;

}NameFunctionPair;

NameFunctionPair nfs[3] = {//定义一个全局变量的结构体数组

{“max” , maxValue},{“sum” , sum},{“minus” , minus}

};

PFUN getFunctionWithName(char *name);

PFUN getFunctionWithName(char *name){//通过名字获取该名字对应的函数体的功能

for(int i = 0 ; i < 3 ; i ++){

if(strcmp(nfs[i].name , name) == 0){

return nap[i].function;

}

}

return maxValue;

}

int getValue(int x , int y , char *functionName);

int getValue(int x , int y , char *functionName){//获取函数

PFUN p = getFunctionWithName(functionName);

return p(x,y)

}

int main(){

int a = getValue(10,20,”sum”);//在程序使用过程中,使用字符串是最方便的

printf(“a=%d\n”,a);

}

时间: 2024-10-11 11:59:22

二十、函数指针高级(动态调用)的相关文章

Python Cookbook(第3版)中文版:15.12 将函数指针转换为可调用对象

15.12 将函数指针转换为可调用对象? 问题? 你已经获得了一个被编译函数的内存地址,想将它转换成一个Python可调用对象,这样的话你就可以将它作为一个扩展函数使用了. 解决方案? ctypes 模块可被用来创建包装任意内存地址的Python可调用对象.下面的例子演示了怎样获取C函数的原始.底层地址,以及如何将其转换为一个可调用对象: >>> import ctypes >>> lib = ctypes.cdll.LoadLibrary(None) >>

让类成员函数指针成为可调用对象

类成员函数指针实践上是一个指针类型,不可直接通过调用运算符()作为可调用对象调用,一般调用该类成员函数指针需要指定该指针对应的对象. 一般情况下调用类成员函数指针: // a.h #ifndef A_H #define A_H #include <iostream> using std::cout; using std::endl; class A{ public:     void print(); }; #endif // a.cpp #include "a.h" vo

十九、函数指针高级(返回值是函数指针)

1.int (*functionName(int a))(int , int); 可改为: typedef int(*PFUN)(int , int); PFUN functionName(int a ); 2.示例: typedef int(*PFUN)(int , int); //相当于把int (*)(int , int)改成PFUN int maxValue(int x , int y); int maxValue(int x , int y){//最大值函数 return x>y?x:

十八、函数指针高级(函数指针数组)

1.int (*p[3])(int , int ) = {0}; 可改为: typedef int(*PFUN)(int , int); PFUN p[3] = {0}; p[0] = maxValue; p[1] = sum;

js语言基础练习(二)---------------函数的高级(了解),类和对象(重点)

函数基本知识总结: 1函数就是可以重复执行的代码 2.组成:参数.功能.返回值 3为什么要用函数,因为一部分代码的使用次数会汗多,封装起来,需要的时候调用 4函数不调用不执行 5同名函数会覆盖,后面的会覆盖前面的 6函数名等于整个函数 7 加载函数的时候只加载函数名,不加载函数体 8参数相当于局部变量 9两个平级的函数中变量不会相互影响 10 预解析:函数在解释文档的时候会被整体提到文档的最前面 函数高级+对象 目标:会自己定义一个构造函数,创建自定义对象. 函数高级    不需要重点记忆 1.

终于懂了:Delphi的函数名不是地址,取地址必须遵守Object Pascal的语法(Delphi和C的类比:指针、字符串、函数指针、内存分配等)good

这点是与C语言不一样的地方,以前我一直都没有明白这一点,所以总是不明白:函数地址再取地址算怎么回事? ---------------------------------------------------------------------------------------------------------------- 在学习Delphi的时候,一个很好的建议是和C/C++去类比着学习,从指针,到内存管理,到数组,到面向对象……各个方面,都是有很多可以相似和或者也有不同的方,类比着学习,一

C语言 函数指针三(反向调用)

动态库代码 //简单的动态库开发----报文发送 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> //定义加密函数指针类型 typedef int(*PDesEncSocket)(char *, int , char **, int *); //定义解密函数指针类型 typedef int(*PDesDecSocket)(char *, int

如何动态调用 C 函数

JSPatch 支持了动态调用 C 函数,无需在编译前桥接每个要调用的 C 函数,只需要在 JS 里调用前声明下这个函数,就可以直接调用: 我们一步步来看看怎样可以做到动态调用 C 函数. 函数地址 首先若要动态调用 C 函数,第一步就是需要通过传入一个函数名字符串找到这个函数地址,这里一个必要的前提条件就是 C 编译后的可执行文件里必须有原函数名的信息,才有可能做到通过函数名字符串找到函数地址.我们写个简单的程序来看看它编译后可执行文件的内容有没有这个信息: 编译这个文件,并用otool看下它

1、C语言中的函数指针

一 通常的函数调用 1 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); 2 3 int main(int argc, char* argv[]) 4 { 5 MyFun(10); //这里是调用MyFun(10);函数 6 7 return 0; 8 } 9 10 void MyFun(int x) //这里定义一个MyFun函数 11 { 12 printf("%d\n",x); 13 } 这个MyFun函数是一个无返回值的函数,它