当前位置: 首页 > news >正文

指针函数和函数指针

文章目录

  • 🍊自我介绍
  • 🍊指针函数
  • 🍊指针函数
    • 回调函数


你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~


🍊自我介绍

  Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群一名“创始团队·嘉宾” ,现在我来为大家介绍一下有关嵌入式方面的内容。在进入介绍之前,可能有一些小伙伴不了解易编程·终身成长社群;想要进一步了解社群的小伙伴可以点击下方链接自行跳转至关于社群的介绍:

易编程·终身成长社群介绍 :
https://blog.csdn.net/weixin_74300052?spm=1011.2266.3001.5343

在这里插入图片描述


🍊指针函数

**本质:**是一个函数,只不过返回值是一个地址。
格式:

返回值类型 *函数名称(类型1 参数1,类型2 参数2...)例如:
int *fun(int a,int b)
解释:指针函数和普通的函数一样,只不过返回值是一个
指针类型。并且它必须用同类型的指针变量来接收

代码演示;

#include <stdio.h>
//int *plen = &num
int *design_array(int *plen)
{static int a[] = {10,20,30,40,50};int len = sizeof(a)/sizeof(a[0]);*plen = len;return a;
}
output_array(int *p,int len1)
{for(int i = 0;i < len1;i++){printf("%d ",p[i]);}printf("\n");}int main()
{int *p = NULL;int num = 0,i = 0;p = design_array(&num);output_array(p,num);}

🍊指针函数

函数指针:本质是一个指针,只不过用来保存函数的地址,通过函数指针来调用我们使用的函数。
格式:

数据类型 (*指针变量名)(类型1 参数1,类型2 参数2...);
注:(1)函数名代表函数的首地址(2)上述中的参数1,参数2...等可省略

判断类型的方法:把变量名去掉,剩下的就是类型。

例如:int a;//intshort b;//shortint c[5];//int [5]  &c <===>int (*p)[5]

指针函数运用举例:

int add(int a,int b)//add本身就是一个地址,函数名就相当于函数的地址
{return a + b;
}
int (*funp)(int ,int) = add;//funp = addaddd(10,20);
funp(10,20);

代码解释:

#include <stdio.h>
int add(int a,int b)
{return a + b;
}int sub(int a,int b)
{return a - b;
}
int main()
{int ret = 0;int (*funp)(int a,int b) = add;//funp<==>addret = funp(10,20);printf("a + b = %d\n",ret);funp = sub;ret = funp(10,20);printf("a - b = %d\n",ret);
}

回调函数

概念:

	回调函数就是一个通过函数指针调用的函数。如果你把函数的地址作为参数传递给另一个函数,在另
一个函数中通过指针来接收,通过指针来调用其函数,我
们就说这是回调函数。
#include <stdio.h>
int add(int a,int b)
{return a + b;
}int sub(int a,int b)
{return a - b;
}calc(int x,int y,int (*funp)(int ,int))
{int ret;ret = funp(a,b);//以加法为例,这里就是ret = add(a,b)return ret;
}int main()
{int result = 0;result = calc(20,10,add);printf("a + b = %d\n",result);//30result = calc(20,10,sub);printf("a - b = %d\n",result);//10return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 企业级OV通配符/泛域名https证书申请
  • 大模型检索X一键成片,巴黎奥运的AI新演绎
  • 敏捷与DevOps有什么不同?
  • pyflink的row
  • 渗透小游戏,各个关卡的渗透实例
  • 指针的指针作为形参实测
  • 【组合数学】【Python】【小练习】一、斯特灵近似式求阶乘
  • C++ 基础入门篇
  • 一篇模块化RAG之最新全面系统性综述
  • 【必看!】阿里云推出QWen-7B和QWen-7b-Chat,开放免费商用!
  • MySQL--数据库备份
  • Snooping Coherence Protocols
  • 【langchain学习】使用JsonOutputParser让大模型生成结构化JSON数据
  • PMP报考条件真的需要做项目达到3年时间吗?
  • Gemini Pro 加持,谷歌 AI 笔记 Notebook LM 重磅升级!
  • Create React App 使用
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JSDuck 与 AngularJS 融合技巧
  • PHP那些事儿
  • React Native移动开发实战-3-实现页面间的数据传递
  • Web标准制定过程
  • windows-nginx-https-本地配置
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 前端性能优化——回流与重绘
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 设计模式走一遍---观察者模式
  • 深入浅出webpack学习(1)--核心概念
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 为什么要用IPython/Jupyter?
  • 新手搭建网站的主要流程
  • !!java web学习笔记(一到五)
  • #### golang中【堆】的使用及底层 ####
  • #if #elif #endif
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (175)FPGA门控时钟技术
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (第一天)包装对象、作用域、创建对象
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (十二)Flink Table API
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (四)c52学习之旅-流水LED灯
  • (一)、python程序--模拟电脑鼠走迷宫
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .net framework 4.8 开发windows系统服务
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET8使用VS2022打包Docker镜像
  • .NET成年了,然后呢?
  • @SpringBootApplication 注解