C49-函数指针(通过指针调用函数)

一 函数指针的基本语法

  1. 函数指针是指向函数的指针变量,存储函数的入口地址。通过它可间接调用函数

  2. 函数指针的定义:

    返回值类型 (*指针名)(参数列表);

二 示例

  1. 无返回值函数示例
  • Example:
c 复制代码
#include <stdio.h>

    //封装函数
void PrintWelcome()
{
    puts("程序已启动,欢迎使用!");
}

int main()
{   //定义一个函数指针变量
    void (*p)();
    p=PrintWelcome;//指向函数

    //调用函数
    (*p)();

    return 0;
}
  • Show:

2.有返回值函数示例

  • Example:
c 复制代码
#include <stdio.h>

//封装有返回值函数
int inCData(int data)
{
    return ++data;
}

int main()
{   int result;

    //有返回值的函数指针定义、调用;
    int (*p1)(int data);
    p1=inCData;
    result=(*p1)(11);
    printf("test p1:%d",result);

    return 0;
}
  • Show:

三 函数指针编程实战

  • 题目:

  • Example:

c 复制代码
#include <stdio.h>
#include <stdlib.h>

    //封装求最大值函数
int GetMax(int data1,int data2)
{
    int result;
    result=data1>data2?data1:data2;
    return result;
}

    //封装求最小值函数
int GetMin(int data1,int data2)
{
    int result;
    result=data1<data2?data1:data2;
    return result;
}

    //封装求和函数
int GetSum(int data1,int data2)
{
    int result;
    result=data1+data2;
    return result;
}

    //封装数据处理函数
int DataHandler(int data1,int data2,int (*pfunc)(int data1,int data2))
{
    int result;
    result=(*pfunc)(data1,data2);
    return result;
}

    //主函数
int main()
{
    //定义变量
    int num1=10;
    int num2=20;
    int cmd;
    int result;

    //定义函数指针
    int(*pfunc)(int data1,int data2);

    //输入数据
    printf("请根据你的需求输入以下命令:1(取最大值);2(取最小值);3(求和).\n你的命令是:");
    scanf("%d",&cmd);

    //用户命令转为所需的处理函数的指针
    switch(cmd)
    {
        case 1:
            pfunc=GetMax;
        break;
        case 2:
            pfunc=GetMin;
        break;
        case 3:
            pfunc=GetSum;
        break;
        default:
            printf("指令错误!请在下次测试中输入有效指令:1(取最大值);2(取最小值);3(求和)");
            exit(-1);
    }

    //调用数据处理函数
    result=DataHandler(num1,num2,pfunc);

    //输出数据:返回给用户结果
    printf("你需要的结果是:%d",result);
    
    return 0;
}
  • Show:
相关推荐
LDR00610 小时前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
Luminous.12 小时前
C语言--day30
c语言·开发语言
玖玥拾12 小时前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
謓泽12 小时前
C语言不是语法,是通往机器的地图。
c语言·开发语言
不会C语言的男孩12 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
闪闪发亮的小星星12 小时前
高斯光以及高斯光公式解释
笔记
cqbzcsq13 小时前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
2601_9516438814 小时前
C语言长文整理,关键字和数据类型
c语言·数据类型·关键字·嵌入式开发·格式化输出
阿米亚波14 小时前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
自传.14 小时前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding