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

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

文章目录

    • @[TOC](文章目录)
  • 前言
  • 概述
  • 函数指针
    • 定义:
    • 使用:
    • 回调函数
  • 指针函数

前言

今天学一下函数指针


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

概述

函数指针:是一个指向函数的指针,在内存空间中存放的是函数的地址。
在这里插入图片描述
parr是一个指向数组的指针,它存放的是数组的地址
数组指针–存放数组地址的指针
&数组名–得到数组地址
==函数指针–存放函数地址的指针
&函数名–得到函数地址
请添加图片描述

函数指针

定义:

函数指针的本质是一个指针,该指针的地址指向了一个函数,所以它是指向函数的指针。
声明形式:

ret (*p)(args,....)

函数指针:函数的返回值类型(*指针名)(函数的参数列表类型)
请添加图片描述

使用:

请添加图片描述

  • int ret = (*parr)(5,5);
  • 函数名=&函数名
  • “ int (*parr)(int, int) = &add; ” = “int (*parr)(int, int) = add;”
  • “ int ret = (*parr)(5,5);” = “int ret = parr(5,5); ” = "int ret = add(5,5)”
  • 对于int ret = (*parr)(5,5)来说,*是没有意义的。有没有结果都一样
    请添加图片描述

回调函数

回调函数就是一个通过指针函数调用的函数,将其函数指针作为参数传给另一个函数。回调函数是在特定的事件发生时由另外一方调用的。
请添加图片描述

指针函数

指针函数的本质是一个函数,他的返回值是一个指针。
声明形式:

ret *fun(args,....)

在使用指针函数的时候,需要避免返回局部变量指针的情况
请添加图片描述

一般的变量是存储在栈区的,当函数结束,栈区的变量就会被释放,如果我们在函数内部定义一个变量,在使用一个指针去指向这个变量,当函数调用结束时,这个变量可能就会被释放,九三返回了该地址的指针,也不一定能得到正确的值。
如果我们使用static修饰变量,(上面的static sum)那么该变量就变为了静态变量,静态变量是存放在数据段的,他的生命周期存在于整个程序运行期间。只要程序没有结束,该变量就一直存在。
还有一种解决方法是使用全局变量。因为全局变量也是存放于数据段的。

http://www.lryc.cn/news/26509.html

相关文章:

  • Nodejs中npx简介和作用
  • Matplotlib精品学习笔记001——绘制3D图形详解+实例讲解
  • 学习ifconfig实战技巧,成为网络管理高手
  • day38|70. 爬楼梯(进阶)、322. 零钱兑换、279.完全平方数
  • SpringBoot全局异常处理
  • SpringBoot异常处理
  • 《C++ Primer Plus》(第6版)第8章编程练习
  • RAD Studio 11.3 Alexandria Crack
  • Stm32 iic 协议使用
  • Malware Dev 02 - Windows SDDL 后门利用之 SCManager
  • 每日一题29——山峰数组的顶部
  • Linux- 系统随你玩之--好用到炸裂的系统级监控、诊断工具
  • 第十三节 继承
  • 【优化】性能优化Springboot 项目配置内置Tomcat使用Http11AprProtocol(AIO)
  • SpringBoot之@ConfigurationProperties、@EnableConfigurationProperties
  • 数组一次性删除多条数据
  • 相机删除照片如何恢复?一键解决它
  • vue3搭建教程(基于webpack+create-vue+ element-plus)
  • 代码随想录算法训练营第四十二天 | leetcode 1049. 最后一块石头的重量 II,494. 目标和,474.一和零
  • Java8中Lambda表达式之Collection 的常见用法
  • SpringCloud系列知识快速复习 -- part 2(Sentinel微服务保护,Seata分布式事务,Redis分布式缓存和多级缓存)
  • 设置CentOS7的时间与网络同步
  • java开发手册之编程规约
  • Camera | 5.Linux v4l2架构(基于rk3568)
  • 机房PDU如何挑选?
  • lab备考第二步:HCIE-Cloud-Compute-第一题:FusionCompute
  • js-cookie和vue-cookies(Cookie使用教程)
  • 开创高质量发展新局面,优炫数据库助推数字中国建设
  • 【项目实战】为什么我选择使用CloseableHttpClient,而不是HttpClient,他们俩有什么区别?
  • Spark 内存运用