前言

以下代码是我自己想的一个情景,并通过编程实现,通过本次编程熟悉了一下函数指针的操作,供大家参考!
函数指针概念的链接如下:
https://blog.csdn.net/qq_55648035/article/details/121660141

一、功能描述

本程序实现了一个编码解码的功能,设置了雇主和雇员两个结构体,雇主只需进行编码,而雇员需要解码和编码,雇主的编码方式是将需要发送的内容首先进行字符串转化为整型数组,之后再将每一个元素的值加50;
(原因:雇主拥有最高权力,他只需要编码,不需要解码)
雇员的解码方式是首先判断雇主发送来的编码最后一位的情况,如果是“ r ”,则将编码升序排列,如果是“ f ”,则将编码降序排列,最后将排好的编码每个元素减50输出需要的信息;
(原因:雇员不仅需要接收雇主发来的编码,还需要接收其他雇员的编码,所以在接收编码后需要对编码进行排序,后再解码)
雇员的编码方式是将每一位转化为字符,最后组成字符串输出;
(原因:雇主发送的编码是乱序的,而雇员之间传递的编码是正序的,雇主到雇员值之间需要进行排序解码,而雇员值之间传递不需要)

二、部分代码展示



三、整体代码(供大家学习调试)

#include <stdio.h>
#include<string.h>/* 声明雇主编码函数 bian1 和雇员编码函数 bian2 以及雇员解码函数jie */void bian1(char*, int*, int);
void bian2(char*, int*, int);
void jie(int*, int, int*(*p)(int*, int));/* 定义雇员和雇主结构体,将不同的功能封装到对应的结构体中 */typedef struct
{int num;char a[15];int b[15];void (*code)(char*, int*, int) = bian1;
}employer;typedef struct
{int num;char a[15];int b[15];void (*decode)(int *, int , int* (*p)(int*, int)) = jie; void (*code)(char*, int*, int) = bian2;
}employee;/* 采用冒泡排序的方法进行解码排序 */int* rise(int *a, int len)
{int t;for (int i = 0; i < len; i++){for (int j = 0; j < len - 1 - i; j++)if (a[j] > a[j + 1]){t = a[j];a[j] = a[j + 1];a[j + 1] = t;}}        return a;
}int* fall(int *a, int len)
{int t;for (int i = 0; i < len; i++){for (int j = 0; j < len - 1 - i; j++)if (a[j] < a[j + 1]){t = a[j];a[j] = a[j + 1];a[j + 1] = t;}}    return a;
}/* 选择合适的解码排序方式,并将其赋值给函数指针,函数指针在解码函数中发挥作用 */void jie(int *a, int len, int* (*p)(int*, int))
{a = (*p)(a, len - 1);for(int i = 0; i < len - 1; i++){a[i] = a[i] - 50;                //雇员解码方式,先排序在给每个数组元素减 50}
}void bian1(char* a, int* b, int len)
{for(int i = 0; i < len - 1; i++){b[i] = a[i] - '0' + 50;          //雇主编码方式,字符转化为整型数据并加 50}b[len-1] = a[len-1];
}void bian2(char* a, int* b, int len)
{for(int i = 0; i < len - 1; i++){a[i] = b[i] + 48;                //雇员编码方式,整型数据转化为字符}a[len-1] = b[len-1];
}int main()
{employer boss1;                      //定义两个结构体 boss 和 staffemployee staff1;int len = 0;printf("请输入编码:");               //boss输入编码到编码数组 ascanf("%s", boss1.a);len = strlen(boss1.a);boss1.code(boss1.a, boss1.b, len);printf("编码结果为:");               //boss编码结果输出到编码数组 b 中并输出展示for(int i = 0; i < len-1; i++){printf("%d", boss1.b[i]);}printf("\n");printf("正在将编码发给雇员,请稍后……");printf("\n");for(int i = 0; i < len; i++){staff1.b[i] = boss1.b[i];        //boss的编码结果一个个赋值到 staff 解码数组 b中}switch(staff1.b[len-1])              //通过判断最后一位数据来确定解码方式{case 'r': staff1.decode(staff1.b, len, rise); break;case 'f': staff1.decode(staff1.b, len, fall); break;}printf("雇员解码结果为:");for(int i = 0; i < len - 1; i++){printf("%d", staff1.b[i]);        //输出解码结果}printf("\n");staff1.code(staff1.a, staff1.b, len); //通过 staff 解码数组重新编码后放到编码数组 a 中printf("雇员编码为:");printf("%s\n", staff1.a);return 0;
}

四、结果展示


C语言函数指针编程练习相关推荐

  1. C语言 函数指针和指针函数区别 - C语言零基础入门教程

    目录 一.函数指针和指针函数声明的区别 1.函数指针 2.指针函数 二.函数指针和指针函数调用的区别 1.函数指针的调用 2.指针函数的调用 三.猜你喜欢 零基础 Python 学习路线推荐 : C/ ...

  2. C语言 函数指针 - C语言零基础入门教程

    目录 一.函数指针简介 1.常规函数声明 2.函数指针声明 二.函数指针实战 三.猜你喜欢 零基础 Python 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.函数指 ...

  3. C语言函数指针 和 OC-Block

    C语言函数指针 和 OC-Block 一. C语言函数指针 关于函数指针的知识详细可参考: http://www.cnblogs.com/mjios/archive/2013/03/19/296703 ...

  4. C语言函数指针(结构体函数指针)

    文章目录 20211126 这篇讲得好 参考文章1:C语言函数指针(指向函数的指针)详解 函数指针的定义形式: returnType (*pointerName)(param list); 示例代码: ...

  5. C语言函数指针的应用——自制谐波分析软件

    文章目录 函数指针简介 格式介绍 颜色头文件 计算机仿真 使用说明 完整代码 部分效果图 函数指针简介 如果在一个大型C语言程序中要反复调用函数,而调用的函数又不明确时,函数指针就是一个非常有用的东西 ...

  6. c语言函数指针学习心得,c语言 函数指针 学习C语言笔记

    c语言 函数指针 大一学的C语言,课,算是学了一遍,后来接触Java,C++,易语言,python,还有写单片机用的类似C语言,可以说后来根本没有好好学,C也忘个差不多了,但是这次我课选了OC,不喜欢 ...

  7. c语言函数指针的多种赋值方法

    c语言函数指针用法[多种赋值方法] 提供框架模型,具体代码缩略,适合功能模块包装,例子程序为c语言基于TCP的图片发送 1.mdu_TcpClient.h中: 定义结构体 typedef struct ...

  8. c语言函数指针 的定义方法,C语言 函数指针一(函数指针的定义)

    //函数指针 #include #include #include //函数指针类型跟数组类型非常相似 //函数名就是函数的地址,函数的指针,对函数名进行&取地址操作,还是函数名本身,这是C语 ...

  9. c语言函数指针封装函数,C语言之函数指针、回调函数的使用

    一.背景 首先看下如下代码,这个定义是放在头文件的,在程序中tCdrvCallbackFkt也定义了另一个变量,而且括号后面还跟定义了几个变量,不理解这个定义. typedef void (PUBLI ...

最新文章

  1. C# switch嵌套语法
  2. 静静守候属于我们的幸福。坚守我们的约定
  3. Rational rose中实心菱形的画法
  4. 研究人员发现利用Excel宏可发起跳板攻击
  5. jsp内置对象--session
  6. 数据结构与算法面试题80道(35)
  7. 使用Nacos搭建微服务注册中心和配置中心(二)
  8. 从前景、待遇、入门难度分析,Java和HTML5哪个好
  9. Java基础:什么是List接口,如何去运用?
  10. [android]亲自破解Flappy Bird(去广告+永生)
  11. [转]rails常用验证方法
  12. 查看sqlserver2008数据库服务器实例名称
  13. python函数中的变量,使全局Python函数中的所有变量
  14. Incremental Event Detection via Knowledge Consolidation Networks
  15. python定义一个字符串变量_python基础入门语法和变量类型(一)
  16. sprd bootloader 分析流程
  17. Python 算法:线性回归及相关公式推导
  18. 模拟开关74hc4052的介绍和使用
  19. 中英文免安装版IE6、IE7、IE8浏览器下载
  20. 博文推荐|深入解析 BookKeeper 多副本协议(一)

热门文章

  1. 使用Windbg查看CrashDump
  2. 字符串中的十六进制字符如何转换成十六进制数
  3. forword_list学习之创建,初始化assign,赋值操作operator=, 元素访问front,交换内容swap,检查容器是否为空empty
  4. iOS11真机运行CoreML图像识别demo(Object C 版)
  5. 视频会议服务器一般存放在哪里?
  6. 【转】Spring 中配置sessionFactory及用法(JAVA后端)
  7. C语言实现雷克子波频谱
  8. JavaScript在控制台常见的报错信息
  9. ESET NOD32官方活动送一年激活码(9月4号更新)
  10. python判断语句_详解Python判断语句的使用方法