函数指针与typedef

#include<bits/stdc++.h>
using namespace std;

//定义一个函数指针
typedef int (*Fun)(int,int);

int add(int a,int b){return a+b;}
int sub(int a,int b){return a-b;}
int mul(int a,int b){return a*b;}
int _div(int a,int b){return b?a/b:-1;}

Fun fun(char op)
{
    switch(op)
    {
    case ‘+‘:return add;
    case ‘-‘:return sub;
    case ‘*‘:return mul;
    case ‘/‘:return _div;
    default:return NULL;
    }
    return NULL;
}

//方法1
//返回值为一个拥有两个int参数、返回类型为int的函数指针
int (*for_fun(char op))(int, int)
{
    return fun(op);
}
//方法2
//直接调用函数
int fun_cal(int a,int b, char op)
{
    Fun fp=fun(op);//定义一个函数指针,接收两个int整数
    if(fp)
        return fp(a,b);
    else
        return -1;
}

int main()
{
    cout<<"100+20="<<fun_cal(100,20,‘+‘)<<endl;
    cout<<"100-20="<<(*for_fun(‘-‘))(100,20)<<endl;
    cout<<"100*20="<<fun_cal(100,20,‘*‘)<<endl;
    cout<<"100/20="<<(*for_fun(‘/‘))(100,20)<<endl;
    return 0;
}

原文地址:https://www.cnblogs.com/ybf-yyj/p/9443615.html

时间: 2024-10-08 19:09:58

函数指针与typedef的相关文章

c语言定义函数指针和typedef简写

二种方法来定义函数指针 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<Windows.h> 4 5 int add(int a, int b) 6 { 7 return a + b; 8 } 9 10 //void msg(char s[]) 11 //void (*p)(char s[]) 函数指针的定义方法 12 //void (*)(char *s) 函数指针的类型 13 14 void msg(char

结构体中函数指针与typedef关键用途(函数指针)

// 结构体函数指针.  #include<stdio.h> //为了代码的移植考虑,一般使用typedef定义函数指针类 ,另一个好处是,减少代码的书写量.  typedef void (*shout)(char *name,int age); typedef struct {  //用指针来存储字符串     char *name;    int age ;    shout personinfo; }person; //类似于c++中类方法的实现,在这里,是为结构体中指针函数提供实现.在

函数指针的typedef

1.定义函数的指针类型: 就像自定义数据类型一样,我们也可以先定义一个函数指针类型,然后再用这个类型来申明函数指针变量. 一个自定义数据类型的例子. typedef int* PINT; //为int* 类型定义了一个PINT的别名 int main() { int x; PINT px=&x; //与int * px=&x;是等价的.PINT类型其实就是int * 类型 *px=10; //px就是int*类型的变量 return 0; } 看一下函数指针类型的定义及使用: void M

C语言 函数指针定义三种方式

//函数指针 #include<stdio.h> #include<stdlib.h> #include<string.h> //函数指针类型跟数组类型非常相似 //函数名就是函数的地址,函数的指针,对函数名进行&取地址操作,还是函数名本身,这是C语言编译器的特殊处理 void test(int a){ printf("a=%d\n",a); } void ProtectA(){ //定义函数类型 typedef void(FunType)(

C++ 函数指针

参考链接: http://hipercomer.blog.51cto.com/4415661/792300 C++ 静态函数指针的使用方法 demo 一  调用方法 void LoadingLayer::init() { //定义两个不同类型的函数指针类型 typedef ServerZoneLayer* (*subclass)(); typedef CCLayer* (*superclass)(); //创建一个函数指针 subclass subfun = &ServerZoneLayer::

Scheme中lambda表达式与函数指针小例

SICP/Chapter2/Exercise-2.4 Lambda表达式语法 (lambda kw-formals body) 题目描述 用过程性表示方式重写序对的cons.car.cdr Scheme代码 (define (cons-24 x y) (lambda (m) (m x y))) (define (car-24 z) (z (lambda (p q) p))) 这段代码只有4行,但是逻辑关系并不好理解. 原因在于函数式语言的自顶向下实现方式不符合一般的逻辑习惯. lambda以类似

C 语言实现多态的原理:函数指针

C语言实现多态的原理:函数指针 何为函数指针?答案:C Programming Language. 可以查阅下,从原理上来讲,就是一个内存地址,跳过去执行对应的代码段. 既然如此,在运行时决定跳到哪个地方去执行特定的代码即可. 一个简单的版本: 以音频解码器作为例子:AAC 解码器,Mpeg解码器,以及其他类型的解码器. 那手动的多态可能会这样实现: U32 audioHandle = AudioDecOpen(int type) { if(type == aac) return aac_ope

C基础--函数指针的使用

之前在看代码的时候,看了函数指针的使用,大体分为如下几类: 做一个function list,通过指针索引调用,使得处理功能类似的函数看起来更加清晰: 函数指针作为另一个函数的参数,用作回调: linux中经常使用来达到相同接口,实现不同,如: 1 struct platform_driver { 2 int (*probe)(struct platform_device *); 3 int (*remove)(struct platform_device *); 4 void (*shutdo

你必须知道的指针基础-7.void指针与函数指针

一.不能动的“地址”—void指针 1.1 void指针初探 void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据.和用int表示指针异曲同工,只是更明确是“指针”. 因此void*只能表示一个地址,不能用来&取值,也不能++--移动指针,因此不知道多少字节是一个数据单位. int nums[] = {3,5,6,7,9}; void* ptr1 = nums; //int i = *ptr1; // 对于void指针没法直接取值 int* ptr2 = (i