【C/C++】指针函数与函数指针

1、指针函数--指针作为函数的返回值

指针函数本质是一个函数,只不过函数的返回值是一个指针
#include <stdio.h>
#include <malloc.h>
#include <string.h>char * funGetString();
int main() {char * sentence =funGetString();printf(" == %s\n",sentence);return 0;
}char * funGetString(){char * str =(char* )malloc(100);strcpy(str,"hello darkness My old friend!");return str;
}

2、函数指针 -指针保存函数地址

咱们定义的函数,在运行程序的时候,会将函数的指令加载到内存的代码段,所以函数也有
起始地址。
c语言规定:函数的名字就是函数的首地址,即函数的入口地址 咱们就可以定义一个指针
变量,
来存放函数的地址,这个指针变量就是函数指针变量。

1 函数指针变量的定义方法

返回值类型 (*函数指针变量名 )( 形参列表

//定义了一个函数指针变量p,p指向的函数
//必须有一个整型的返回值,有两个整型参数。int (*p)(int,int);int max(int x,int y) { }int min(int x,int y) { }//可以用这个p存放这类函数的地址。p=max; p=min;

2 调用函数的方法

1.通过函数的名字去调函数(最常用的)

1 int max(int x,int y) { }
2 int main()
3 {
4 int num;
5 num=max(3,5);
6 }

2.可以通过函数指针变量去调用

1 int max(int x,int y) { }
2 int main()
3 {
4 int num;
5 int (*p)(int ,int);
6 p=max;
7 num=p(3,5);
8 }

3、回调函数

其实还可以把函数指针作为参数传递给 其他函数,这样可以构建一个 回调的效果

函数指针最常用的地方在于将一个函数作为参数传递给另一个函数的时候要使用函数指针
将一个函数作为参数传递给另一个函数,将这个函数称之为回调函数
//测试函数指针回调
void funcExecute(void (*p)(int),int value){printf(" Prepare to callBack!!\n");p(value);}//回调函数
void funcCallBack(int x){printf("mission accomplished! %d\n",x);
}

int main(){//测试回调 只需要传入函数名
funcExecute(funcCallBack,666);return 0;
}

例2

1 #include <stdio.h>
2
3 int add(int x,int y)
4 {
5 return x+y;
6 }
7 int sub(int x,int y)
8 {
9 return x‐y;
10 }
11 int mux(int x,int y)
12 {
13 return x*y;
14 }
15 int dive(int x,int y)
16 {
17 return x/y;
18 }
19
20 int process(int (*p)(int ,int),int a,int b)
21 {
22 int ret;
23 ret = (*p)(a,b);
24 return ret;
25 }
26
27 int main(int argc, char *argv[])
28 {
29 int num;
30 num = process(add,2,3);
31 printf("num = %d\n",num);
32
33 num = process(sub,2,3);
34 printf("num = %d\n",num);
35
36 num = process(mux,2,3);
37 printf("num = %d\n",num);
38
39 num = process(dive,2,3);
40 printf("num = %d\n",num);
41
42 return 0;
43 }

4、函数指针数组

函数指针数组:本质是一个数组,数组里面的每一个元素都是一个函数指针
返回值类型 (*函数指针变量名[函数指针的个数])(形参列表);

 

int(*p[10])(int,int);
定义了一个函数指针数组,有10个元素p[0] ~p[9],每个元素都是函数指针变量,
指向的函数,必须有整型的返回值,两个整型参数。

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

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

相关文章

Java练习题-用冒泡排序法实现数组排序

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;Java练习题 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又…

域信息收集

DMZ&#xff0c;是英文“demilitarized zone”的缩写&#xff0c;中文名称为“隔离区”&#xff0c;也称“非军事化区”。它是为了解决安装防火墙后外部网络的访问用户不能访问内部网络服务器的问题&#xff0c;而设立的一个非安全系统与安全系统之间的缓冲区。该缓冲区位于企业…

Lua系列文章(1)---Lua5.4参考手册学习总结

windows系统上安装lua,下载地址&#xff1a; Github 下载地址&#xff1a;https://github.com/rjpcomputing/luaforwindows/releases 可以有一个叫SciTE的IDE环境执行lua程序 1 – 简介 Lua 是一种强大、高效、轻量级、可嵌入的脚本语言。 它支持过程编程&#xff0c; 面向对…

android Google官网 :支持不同的语言和文化 rtl / ltr : 本地化适配:RTL(right-to-left) 适配

参考 google官网&#xff1a; 支持不同的语言和文化 应用包含可能专门针对特定文化而设计的资源。例如&#xff0c;应用可以包含针对特定文化的字符串&#xff0c;这些字符串将转换为当前语言区域的语言。 将具有文化特异性的资源与应用的其他资源分开是一种很好的做法。And…

vue,mixins混入

痛点&#xff1a;当我们的项目越来越庞大&#xff0c;项目中的某些组件之间可能会存在一些相似的功能&#xff0c;这就导致了在各个组件中需要编写功能相同的代码段&#xff0c;重复地定义这些相同的属性和方法&#xff0c;导致代码地冗余&#xff0c;还不利于后期代码的维护。…

计算机竞赛 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python

文章目录 1 简介2 传统机器视觉的手势检测2.1 轮廓检测法2.2 算法结果2.3 整体代码实现2.3.1 算法流程 3 深度学习方法做手势识别3.1 经典的卷积神经网络3.2 YOLO系列3.3 SSD3.4 实现步骤3.4.1 数据集3.4.2 图像预处理3.4.3 构建卷积神经网络结构3.4.4 实验训练过程及结果 3.5 …

DATA URL:嵌入 URL 中的数据资源

文章目录 参考环境DATA URL概念结构DATA URL 的优缺点优点缺点 DATA URL 与图片获取图片的 Base64 编码结果在 HTML 中应用 DATA URL 以展示图片 DATA URL 与 allow_url_fopen 及 allow_url_include 配置项allow_url_fopen 配置项allow_url_include 配置项allow_url_fopen 与 a…

服务器数据恢复-V7000存储2块磁盘故障脱机的数据恢复案例

服务器数据恢复环境&#xff1a; P740AIXSybaseV7000存储&#xff0c;存储阵列柜上共12块SAS机械硬盘&#xff08;其中一块为热备盘&#xff09;。 服务器故障&#xff1a; 存储阵列柜中有磁盘出现故障&#xff0c;工作人员发现后更换磁盘&#xff0c;新更换的磁盘数据同步到40…

零基础快速自学SQL,2天足矣。

此文是《10周入门数据分析》系列的第6篇。 想了解学习路线&#xff0c;可以先行阅读“ 学习计划 | 10周入门数据分析 ” 上一篇分享了数据库的基础知识&#xff0c;以及如何安装数据库&#xff0c;今天这篇分享数据库操作和SQL。 SQL全称是 Structured Query Language&#x…

Android约束布局ConstraintLayout的Guideline,CardView

Android约束布局ConstraintLayout的Guideline&#xff0c;CardView <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:a…

力扣刷题 day39:10-09

1.统计有序矩阵中的负数 给你一个 m * n 的矩阵 grid&#xff0c;矩阵中的元素无论是按行还是按列&#xff0c;都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目。 方法一&#xff1a;二分法 #方法一&#xff1a;二分法 def countNegatives(grid):res0for nums in…

【itext7】使用itext7将多个PDF文件、图片合并成一个PDF文件,图片旋转、图片缩放

这篇文章&#xff0c;主要介绍使用itext7将多个PDF文件、图片合并成一个PDF文件&#xff0c;图片旋转、图片缩放。 目录 一、itext7合并PDF 1.1、引入依赖 1.2、合并PDF介绍 1.3、采用字节数组方式读取PDF文件 1.4、合并多个PDF文件 1.5、合并图片到PDF文件 1.6、旋转图…