C/C++ 函数指针

指针变量可以指向任何类型的数据,也可以指向一个函数。每个函数在内存中都占用一段存储单元,这段存储单元的首地址称为函数的入口地址,指向这个函数入口地址的指针称为函数指针。

1、函数指针基本用法:
int max(int a, int b)
{
    return a > b ? a : b;
}
int (*p) (int , int) = max;
int x = 20, y = 30;
int z = p(x, y);

首先定义了一个max函数,函数接受两个int类型的参数并返回其中的最大值。
int (*p) (int , int) = max;
这行代码中定义了一个函数指针p,在定义函数指针时必须指明函数指针所指向函数的返回值和参数列表。代码中的函数指针p所指向的函数的返回值为int类型,参数列表为两个int类型的参数,这与max函数的返回值和参数列表一致,因此可以用函数max初始化函数指针p。
注:函数名等价于函数的入口地址

2、函数指针的定义和初始化
  1. 括号不能少
    在定义时 * p 必须用括号括起来,如果去掉括号代码变为
    int *p (int, int) // p是函数而非指针
    上面代码中的p不是一个函数指针,而是一个函数名。代码声明了一个函数p,函数返回值类型为int* 类型,并且包括两个int类型的参数。
  2. 在对函数指针初始化或者赋值的过程中,一定要保证函数的参数个数和类型与函数指针的定义相匹配。
3、函数指针实现简单的四则运算

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int add(int a, int b)
{
       return a + b;
}

int minus(int a, int b)
{
       return a - b;
}

int multi(int a, int b)
{
       return a * b;
}

int divide(int a, int b)
{
       return a / b;
}

int calculator(int a, int b, int(*Func)(int, int))
{
       return Func(a, b);
}

int main()
{
       int a = 40, b = 20;

       int res1 = calculator(a, b, add);
       printf("a + b = %d\n", res1);
       int res2 = calculator(a, b, minus);
       printf("a - b = %d\n", res2);
       int res3 = calculator(a, b, multi);
       printf("a * b = %d\n", res3);
       int res4 = calculator(a, b, divide);
       printf("a / b = %d\n", res4);

       system("pause");
       return 0;
}

运行结果:
在这里插入图片描述

4、typedef关键字的用法

使用typedef关键字对函数指针类型重定义,并在定义函数指针时使用通过typedef重定义后的类型名。

typedef int (*pFunc) (int, int);
int calculator( int a, int b, pFunc func );
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值