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:
相关推荐
aprilaaaaa2 小时前
(TC397 学习笔记)二、ICU和TIM的时钟计算
笔记·学习·fpga开发
wuyk5553 小时前
107.FreeRTOS 链表深度解析:从原理到面试满分答案
c语言·开发语言·数据结构·stm32·单片机·链表·面试
hongmai6668883 小时前
ESP32-WROVER-IE-N4R8:外接天线+8MB内存,专治信号焦虑
笔记·单片机·嵌入式硬件·microsoft·risc-v
Persistent的粽子!3 小时前
C++:类与对象(一)
开发语言·c++·经验分享·笔记
xian_wwq3 小时前
【学习笔记】-深度认知系列-第8讲主流AI模型横向评测——GPT、Claude、Gemini、盘古、文心、通义
人工智能·笔记·学习
晨欣5 小时前
NVIDIA GPU 架构演进学习笔记(GPT-5.6 Terra 生成)
笔记·学习·gpu·显卡·nvidia·英伟达
AAA代码批发商5 小时前
Days 39 Linux C 开发之 SQLite 数据库完整学习笔记
linux·c语言·数据库
一条破秋裤5 小时前
17_ADC原理与转换模式
笔记·stm32·学习
知产xiao_xin5 小时前
C语言运算符的种类、运算优先级和结合性
笔记
知产xiao_xin6 小时前
《伯尔尼公约》—— 版权保护期
经验分享·笔记·知识产权