函数指针与函数指针数组

开头

大家好,我叫这是我58。今天,我们来学一下关于C语言的函数指针与函数指针数组的一些知识。

1.什么是函数指针?

int Add(int i, int ia) {
    return i + ia;
}
int Sum(int i, int ia) {
    return i - ia;
}
int Tim(int i, int ia) {
    return i * ia;
}
int Div(int i, int ia) {
    return i / ia;
}
void calc(int(*funp)(int, int)) {
    int i = 0;
    int ia = 0;
    printf("请输入你要计算的两个整型 -> ");
    scanf("%d %d", &i, &ia);
    printf("计算的结果为:%d", funp(i, ia));
}

函数指针,是一种指向函数的指针,本质上是指针。它的写法是这样的:指向的函数的返回类型 (*指针名)(所有参数的类型)(注:如果有多个参数,那么参数的类型要用,分开)。适用于函数的参数,例如在头文件stdlib.h里的qsortbsearch函数,他们的最后一个参数均是函数指针,而且都表示为两个元素比较的方式,并且在上面的程序中,calc这个函数的参数就是一个指向的函数的返回值的类型为int,参数的类型有两个int,而且还叫funp的函数指针。最后,函数指针最特殊的一点来了:函数指针不需要解引用操作符*就能直接使用!为什么呢?,因为&函数指针 == 函数指针,而且,函数指针在调用的时候,前边的*其实是无意义的,因此,你可以这样去写:(**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************函数指针)(参数)
看!这多令人感到惊叹!就连我也不要自主的唱出了《》呢。那么,说到这里了,我们接下来就来介绍一下函数指针数组吧。

2.什么是函数指针数组?

而函数指针数组,是一种存放函数指针的数组,本质上是数组。它的写法是这样的:指向的函数的返回类型 (*数组名[数组的元素个数])(所有参数的类型),需要注意的是,数组存放的函数的所有形参和形参的类型最好与这个数组所有的形参和形参的类型一模一样,否则就会出错,当然,跟上面的函数指针一样,这样写也可以:(*****************************函数指针数组[第几项])(参数们),因为&函数指针 == 函数指针,而且跟上面一样,函数指针在调用的时候,前边的*其实是无意义的,因此,这样写也可以。在看完这些之后,我们就一起来看一下我的加强版简易整型计算器吧。

3.函数指针与函数指针数组的实际运用

简易整型计算器(加强版)

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
int Add(int i, int ia) {
    return i + ia;
}
int Sum(int i, int ia) {
    return i - ia;
}
int Tim(int i, int ia) {
    return i * ia;
}
int Div(int i, int ia) {
    return i / ia;
}
int Mod(int i, int ia) {
    return i % ia;
}
int Pow(int i, int ia) {
    return (int)pow(i,ia);
}
void calc(int(*funp)(int, int)) {
    int i = 0;
    int ia = 0;
    printf("请输入你要计算的两个整型 -> ");
    scanf("%d %d", &i, &ia);
    printf("计算的结果为:%d", funp(i, ia));
}
int main() {
    int i = 0;
    printf("**********************************\n");
    printf("* 1.Add(+)   2.Sum(-)   3.Tim(*) *\n");
    printf("* 4.Div(/)   5.Mod(%c)   6.Pow(^) *\n",'%');
    printf("**********************************\n");
    scanf("%d", &i);
    int (*funarp[6])(int, int) = { Add,Sum,Tim,Div,Mod,Pow };
    if (i > 0 && i < 7) {
        calc(funarp[i - 1]);
    }
    return 0;
}

结尾

那么,在你看到这里之后,可以评论来互动一下我哦。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值