【C语言】指针数组、数组指针、函数指针、指针函数、函数指针数组、回调函数

【C语言】函数指针与指针函数


文章目录

    • @[TOC](文章目录)
  • 前言
  • 一、指针数组
  • 二、数组指针
  • 三、函数指针
  • 四、指针函数
  • 五、函数指针数组
  • 六、回调函数
  • 七、参考资料
  • 总结

前言

使用工具:
1.DEVC++


提示:以下是本篇文章正文内容,下面案例可供参考

一、指针数组

优先级关系:( ) > [ ] > *。
char *p[4]是个数组,那就要干数组的活。指针数组的意思就是,这个数组里面的元素都是指针。指针的类型是char ,指向的内容也是char 型。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/*++++++++++++++++++++++++++++++++++++++*/ 
/*           声明一个指针数组            */
/*++++++++++++++++++++++++++++++++++++++*/char *point_array[4];char array[5] = {'1', '2', '3', '4', '\0'};  // 使用字符初始化point_array[0] = &array[0];  // 示例:只初始化第一个指针point_array[1] = &array[1];point_array[2] = &array[2];point_array[3] = &array[3];printf("*point_array[0] = %d, *point_array[1] = %d, *point_array[2]= %d, *point_array[3] = %d\n",\*point_array[0], *point_array[1], *point_array[2], *point_array[3]);printf("array[0] = %d, array[1] = %d, array[2] = %d, array[3]= %d\n",\array[0], array[1], array[2], array[3]);system("pause");return 0;
}

在这里插入图片描述

二、数组指针

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/*++++++++++++++++++++++++++++++++++++++*/ 
/*           声明一个数组指针            */
/*++++++++++++++++++++++++++++++++++++++*/int (*array_point)[5];int array[3][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};array_point = array;printf("*array_point[0]= %d, *array_point[1]= %d, *array_point[2] = %d, *array_point[3]= %d\n",\*array_point[0], *array_point[1], *array_point[2], *array_point[3]);printf("*array[0] = %d, *array[1] = %d, *array[2] = %d, *array[3] = %d\n",\*array[0], *array[1], *array[2],*array[3]);system("pause");return 0;
}

在这里插入图片描述

三、函数指针

#include <stdio.h>// 相加函数
int add(int x, int y)
{return x + y;
}// 相减函数
int subtract(int x, int y)
{return x - y;
}/*++++++++++++++++++++++++++++++++++++++*/ 
/*           声明一个函数指针            */
/*    1.指针指向的函数参数类型要相同      */
/*    2. 是一个指针,无需返回值           */
/*    3.可以不用声明变量,因为无需传参     */
/*++++++++++++++++++++++++++++++++++++++*/
int (*fun)(int , int ); int main()
{fun = add;          //函数指针等价于add函数printf("相加:%d\n", (fun)(1,2));fun = subtract;     函数指针等价于subtract函数printf("相减:%d\n", (*fun)(1, 2));
}
输出结果: 相加:3相减:-1

四、指针函数

#include <stdio.h>// 相加函数
int add(int x, int y)
{return x + y;
}// 相减函数
int subtract(int x, int y)
{return x - y;
}/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*                     声明一个指针函数                       */
/*        1.fun没有被括起来,fun后面跟着括号可以进行传参         */
/*        如: int (*fun(int x))(int,int )                    */
/*        所以 *fun()为指针函数                               */
/*        2.int (int a,int b) 是指针返回的函数原型             */
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
int (*fun())(int, int)
{return add;
}int (*fun_chose(int chose))(int, int)
{if (1 == chose){return subtract;}
}int main()
{int (*operation)(int, int);operation = fun();printf("相加:%d\n", operation(1, 2));operation = fun_chose(1);printf("相减:%d\n", operation(1, 2));
}
输出结果: 相加:3相减:-1

五、函数指针数组

#include<stdio.h>
#include<stdlib.h>
void fun1(const char *str)
{printf("fun1:%s", str);
}
void fun2(const char *str)
{printf("fun2:%s", str);
}
void fun3(const char *str)
{printf("fun3:%s", str);
}
int main()
{int i = 0;/*void(*pfun1)(const char *) = fun1;void(*pfun2)(const char *) = fun2;void(*pfun3)(const char *) = fun3;*/void(*function_ponit_array[3])(const char *) = { fun1, fun2, fun3 };for (i = 0; i < 3; i++){function_ponit_array[i]("hello world\n");}system("pause\n");return 0;
}

在这里插入图片描述

六、回调函数

#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
// 定义回调函数类型
typedef void (*CallbackType)(int);
// 函数接受回调函数作为参数
void performOperation(int data, CallbackType callback) {// 执行操作printf("Performing operation with data: %d\n", data);// 调用回调函数callback(data);
}
// 实现一个回调函数
void callbackFunction(int result) {printf("Callback function called with result: %d\n", result);
}
int main(int argc, char *argv[]) {performOperation(42, callbackFunction);system("pause") ;return 0;
}

在这里插入图片描述

七、参考资料

【C语言】《回调函数》详细解析
c语言:数组指针,指针数组,函数指针,函数指针数组,指向函数指针数组的指针C语言-数组指针与指针数组
【C语言】 “函数指针”和“指针函数” 用法和详解(太细了!!!)菜鸟级教程

总结

本文仅仅简单介绍了【C语言】函数指针与指针函数,评论区欢迎讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode】1705. 吃苹果的最大数目

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 有一棵特殊的苹果树&#xff0c;一连 n n n 天&#xff0c;每天都可以长出若干个苹果。在第 i i i 天&#xff0c;树上会长出 a p p l e s [ i ] apples[i] apples[i] 个苹果&a…

使用 HTML 和 CSS 实现绚丽的节日烟花效果

文章目录 1. 效果预览2. 核心技术栈3. 核心代码解读3.1 HTML结构3.2 霓虹文字的CSS样式3.2.1 核心样式代码3.2.2 动画效果 3.3 JavaScript 的烟花效果实现3.3.1 烟花上升3.3.2 粒子爆炸 4. 用户交互5. 运行步骤总结 1. 效果预览 打开后输入文本的展示内容 用户点击页面后播放…

基于openEuler22.09部署OpenStack Yoga云平台(一)

OpenStack Yoga部署 安装OpenStack 一、基础准备 基于OpenStack经典的三节点环境进行部署&#xff0c;三个节点分别是控制节点&#xff08;controller&#xff09;、计算节点&#xff08;compute&#xff09;、存储节点&#xff08;storage&#xff09;&#xff0c;其中存储…

国自然面上项目分享|基于人工智能和病理组学的早癌筛查算法研究|基金申请·24-12-24

小罗碎碎念 今天分享的项目为【常规面上项目】&#xff0c;执行年限为2018年1月至2021年12月&#xff0c;直接费用为55万元。 今天分享的这个项目很有意思&#xff0c;因为这个项目的成果是团队2020年申报基金委优青的材料&#xff0c;并且还有临床验证和商业转化&#xff0c;值…

SDMTSP:黑翅鸢算法(Black-winged kite algorithm,BKA)求解单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)

一、黑翅鸢算法BKA 黑翅鸢算法&#xff08;Black-winged kite algorithm&#xff0c;BKA&#xff09;由Wang Jun等人于2024年提出&#xff0c;该算法受黑翅鸢的迁徙和掠食行为启发而得。BKA集成了柯西突变策略和领导者策略&#xff0c;增强了算法的全局搜索能力&#xff0c;提…

41 stack类与queue类

目录 一、简介 &#xff08;一&#xff09;stack类 &#xff08;二&#xff09;queue类 二、使用与模拟实现 &#xff08;一&#xff09;stack类 1、使用 2、OJ题 &#xff08;1&#xff09;最小栈 &#xff08;2&#xff09;栈的弹出压入序列 &#xff08;3&#xf…

【笔记】深度学习模型评估指标

推荐链接&#xff1a; &#xff08;0&#xff09;多分类器的评价指标 &#xff08;1&#xff09;泛化误差的评价方法&#xff1a;【机器学习】模型评估与选择&#xff08;留出法、交叉验证法、查全率、查准率、偏差、方差&#xff09; &#xff08;2&#xff09;机器学习&…

Linux运维常见命令

vi/vim快捷键使用 1)拷贝当前行 yy ,拷贝当前行向下的5行 5yy&#xff0c;并粘贴&#xff08;输入p&#xff09;。 2)删除当前行 dd ,删除当前行向下的5行5dd 3)在文件中查找某个单词 [命令行下 /关键字&#xff0c;回车查找 ,输入n就是查找下一个 ] 4)设置文件的行号&…

评估大语言模型在药物基因组学问答任务中的表现:PGxQA

​这篇文献主要介绍了一个名为PGxQA的资源&#xff0c;用于评估大语言模型&#xff08;LLM&#xff09;在药物基因组学问答任务中的表现。 研究背景 药物基因组学&#xff08;Pharmacogenomics, PGx&#xff09;是精准医学中最有前景的领域之一&#xff0c;通过基因指导的治疗…

AI芯片常见概念

文章目录 AI芯片常见概念前言常见概念AI芯片分类按照芯片的技术架构分GPU半定制化的 FPGA全定制化 ASIC神经拟态芯片 按应用场景分训练卡推理卡 按部署位置分国产AI卡资料汇总 AI芯片算力和能效比AI芯片算力AI芯片能效比 封装相关Chiplet技术3DIC三星多芯片集成联盟&#xff08…

SpringBoot中使用AOP切面编程实现登录拦截

使用AOP切面编程实现登录拦截 1. 首先实现一个登录注册功能 以下代码仅供参考 控制层 RestController RequestMapping("/user") public class UserController {Autowiredprivate UserService userService;PostMapping("/register")public Result regis…

重温设计模式--享元模式

文章目录 享元模式&#xff08;Flyweight Pattern&#xff09;概述享元模式的结构C 代码示例1应用场景C示例代码2 享元模式&#xff08;Flyweight Pattern&#xff09;概述 定义&#xff1a; 运用共享技术有效地支持大量细粒度的对象。 享元模式是一种结构型设计模式&#xff0…

用python ollama qwen2.5 开发一个AI修仙游戏

用 Python Ollama (Qwen2.5) 开发一个 AI 修仙游戏 简介 本文将介绍如何使用 Python 和 Ollama (Qwen2.5 模型) 开发一个文字版修仙游戏。这个游戏具有以下特点&#xff1a; 完整的修仙世界观和成长体系基于 AI 生成的动态剧情和事件丰富的物品系统(功法、丹药、灵宝等)社交…

【网络安全】网站常见安全漏洞—服务端漏洞介绍

文章目录 网站常见安全漏洞—服务端漏洞介绍引言1. 第三方组件漏洞什么是第三方组件漏洞&#xff1f;如何防范&#xff1f; 2. SQL 注入什么是SQL注入&#xff1f;如何防范&#xff1f; 3. 命令执行漏洞什么是命令执行漏洞&#xff1f;如何防范&#xff1f; 4. 越权漏洞什么是越…

Linux驱动开发 IIC I2C驱动 编写APP访问EEPROM AT24C02

在嵌入式开发中&#xff0c;I2C&#xff08;Inter-Integrated Circuit&#xff09;是一种常用的串行通信协议&#xff0c;广泛应用于与外设&#xff08;如 EEPROM、传感器、显示屏等&#xff09;进行数据交换。AT24C02 是一种常见的 I2C EEPROM 存储器&#xff0c;它提供 2Kbit…

HDR视频技术之十一:HEVCH.265 的 HDR 编码方案

前文我们对 HEVC 的 HDR 编码优化技术做了介绍&#xff0c;侧重编码性能的提升。 本章主要阐述 HEVC 中 HDR/WCG 相关的整体编码方案&#xff0c; 包括不同应用场景下的 HEVC 扩展编码技术。 1 背景 HDR 信号一般意味着使用更多比特&#xff0c;一般的 HDR 信号倾向于使用 10…

linux普通用户使用sudo不需要输密码

1.root用户如果没有密码&#xff0c;先给root用户设置密码 sudo passwd root #设置密码 2.修改visudo配置 su #切换到root用户下 sudo visudo #修改visudo配置文件 用户名 ALL(ALL) NOPASSWD: ALL #下图所示处新增一行配置 用户名需要输入自己当前主机的用户名

【时间之外】IT人求职和创业应知【74】-运维机器人

目录 OpenAI最强推理模型o3发布&#xff0c;AGI测试能力暴涨 英伟达宣布收购以色列AI初创企业Runai 汤姆猫首款AI机器人产品明日发售 心勿贪&#xff0c;贵知足。 感谢所有打开这个页面的朋友。人生不如意&#xff0c;开越野车去撒野&#xff0c;会害了自己&#xff0c;不如…

C#调用WebService的方法

一、前言 在日常工作中&#xff0c;如果涉及到与第三方进行接口对接&#xff0c;有的会使用WebService的方式&#xff0c;这篇文章主要讲解在.NET Framework中如何调用WebService。 1.创建WebService &#xff08;1&#xff09;新建项目——模板选择ASP.NET Web 应用程序 &a…

Qt creator ,语言家功能缺失解决方法

1、找到工具->外部->配置 2、添加目录&#xff0c;双击命名语言家 3、在语言家目录下&#xff0c;添加工具 双击重命名lupdate&#xff0c;即更新翻译 %{CurrentDocument:Project:QT_INSTALL_BINS}\lupdate%{CurrentDocument:Project:FilePath}%{CurrentDocument:Projec…