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:
相关推荐
后季暖13 分钟前
langgraph笔记(2)&& fastapi笔记
笔记
嵌入式阿蔡42 分钟前
CAN总线入门:从协议帧到STM32实战
c语言·stm32·单片机·嵌入式硬件·嵌入式实时数据库
小小筱筱44 分钟前
LabVIEW笔记:解决周立功CAN卡驱动缺失导致的启动报错问题
笔记·labview
Wang's Blog1 小时前
PostgreSQL笔记4: 市场地位、生态全景与行业应用实践
数据库·笔记·postgresql
RainCity1 小时前
Java Swing 自定义组件库分享(十六)
java·笔记·后端
LONGZETECH2 小时前
无人机组装调试实训高损耗痛点分析与虚拟仿真教学落地方案
c语言·开发语言·架构·无人机
luj_17682 小时前
大航海时代:沉浸式财商实战沙盒
c语言·开发语言·网络·经验分享·算法
Navigator_Z2 小时前
LeetCode //C - 1200. Minimum Absolute Difference
c语言·算法·leetcode
LuminousCPP3 小时前
数据结构基础篇(二):顺序表与链表全方位对比|从内存布局到 CPU 缓存理解底层差异
c语言·数据结构·经验分享·链表·缓存
蒸蒸yyyyzwd3 小时前
cpp选手秋招准备 学习笔记day7 webserver
笔记·学习