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:
相关推荐
Cloud_Shy61812 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法
caimouse12 小时前
Reactos 第 5 章 进程与线程 — 5.8 Windows 的 APC 机制
c语言·windows
问心无愧051312 小时前
ctf show web入门110
前端·笔记
道一2313 小时前
Windows系统查看端口占用进程的3种实用方法
windows·笔记
lunzi_082613 小时前
【学习笔记】《Python编程 从入门到实践》第8章:函数定义、参数传递与模块导入
笔记·python·学习
努力攻坚操作系统14 小时前
编程语言编译运行机制对比:C / Java / Python
java·c语言·python
学会去珍惜14 小时前
C语言简介
c语言·开发语言
凡人叶枫15 小时前
Effective C++ 条款07:为多态基类声明 virtual 析构函数
linux·c语言·开发语言·c++
matlabgoodboy16 小时前
计算机java程序代写python代码编写c/c++代做qt设计php开发matlab
java·c语言·python
caimouse16 小时前
Reactos 第 5 章 进程与线程 — 5.11 线程本地存储 TLS
c语言·windows