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:
相关推荐
NeDon8 小时前
[OJ]数据结构:移除链表元素
c语言·数据结构·算法·链表
刃神太酷啦8 小时前
C++ list 容器全解析:从构造到模拟实现的深度探索----《Hello C++ Wrold!》(16)--(C/C++)
java·c语言·c++·qt·算法·leetcode·list
Herbert_hwt8 小时前
C语言结构体详解:从定义到实战应用
c语言
承渊政道8 小时前
一文彻底搞清楚链表算法实战大揭秘和双向链表实现
c语言·数据结构·算法·leetcode·链表·visual studio
松涛和鸣8 小时前
32、Linux线程编程
linux·运维·服务器·c语言·开发语言·windows
Lv11770089 小时前
Visual Studio中的字典
ide·笔记·c#·visual studio
LXS_3579 小时前
Day 16 C++提高之模板
开发语言·c++·笔记·学习方法
无名-CODING9 小时前
栈与队列学习笔记
java·笔记
NZT-489 小时前
C++基础笔记(二)队列deque,queue和堆priority_queue
java·c++·笔记
YJlio10 小时前
ZoomIt 学习笔记(11.7):安装与基础使用——演示/授课/录屏的神级放大镜
笔记·学习·intellij-idea