C语言函数指针调用函数

article/2025/9/28 5:57:03

C语言可以定义指针变量指向函数,通过指针来调用函数。

使用:

1、定义函数指针变量:  函数返回值类型 (*指针变量名)();

2、将已有函数入口赋值给函数指针变量:fnPt = avg;

3、使用指针变量调用函数:(*指针变量名)(参数);


注意:看了一些参考资料里,声明函数指针时不用指定参数类型,但实际编辑时又提示指定参数类型才可以。

例如例子中的 int (*fnPt)(int*, int) = zhizhentest3_1_max;  这里就需要带上参数类型才行,否则编译时报错。


例子:定义函数指针变量,将不同函数赋值给指针变量,调用函数。

#include <stdio.h>//求最大值
int zhizhentest3_1_max(int* data, int len){int max = *data;//获取数组首地址对应的元素值//通过指针+1来获取下一个元素的地址for(int* p=data; p < data+len; p++){if(*p > max) max = *p;}return max;
}//求平均值
int zhizhentest3_2_avg(int* data, int len){int sum = 0;for(int* p=data; p < data + len; p++){sum +=*p;}return sum/len;
}//函数指针变量作为函数参数
void zhizhentest3_3_map(int* data, int len, int (*fn)(int)){for(int* p = data; p < data + len; p++){printf("%d, ", (*fn)(*p));}printf("\n");
}//不变
int zhizhentest3_4_nochange(int val){return val;
}//求平方
int zhizhentest3_5_square(int val){return val * val;
}//求立方
int zhizhentest3_6_cube(int val){return val * val * val;
}//返回指针的函数
int* zhizhentest3_7_map(int* data,int len, int (*fn)(int)){static int result[5];int i=0;for(int* p = data; p < data + len; p++){result[i++] = (*fn)(*p);}return result;
}void zhizhentest3main(){int arr[5] = {4,7,2,3,9};int (*fnPt)(int*, int) = zhizhentest3_1_max;//定义返回值为int型的函数指针变量*fnPt,并将zhizhentest3_1_sum函数入口赋给fnPtint max = (*fnPt)(arr,5);//通过函数指针变量调用函数,传入参数printf("max=%d\n", max);fnPt = zhizhentest3_2_avg;//将zhizhentest3_2_avg函数入口赋给指针变量fnPtint avg = (*fnPt)(arr,5);printf("avg=%d\n", avg);printf("\n");printf("数组元素为:\n");zhizhentest3_3_map(arr,5,zhizhentest3_4_nochange);printf("元素求平方:\n");zhizhentest3_3_map(arr,5,zhizhentest3_5_square);printf("元素求立方:\n");zhizhentest3_3_map(arr,5,zhizhentest3_6_cube);printf("\n");int* result1 = zhizhentest3_7_map(arr,5,zhizhentest3_4_nochange);printf("返回的指针数组元素为:\n");for(int* p1 = result1; p1 < result1 + 5; p1++){printf("%d, ", *p1);}printf("\n");int* result2 = zhizhentest3_7_map(arr,5,zhizhentest3_5_square);printf("返回的数组平方元素为:\n");for(int* p2 = result2; p2 < result2 + 5; p2++){printf("%d, ", *p2);}printf("\n");int* result3 = zhizhentest3_7_map(arr,5,zhizhentest3_6_cube);printf("返回的数组立方元素为:\n");for(int* p3 = result3; p3 < result3 + 5; p3++){printf("%d, ", *p3);}printf("\n");
}
输出:




http://chatgpt.dhexx.cn/article/X791MrOh.shtml

相关文章

C语言函数指针与调用

C语言函数指针与调用 平时我们使用函数传递的参数一般为数据变量&#xff0c;那么是否可以传递函数呢&#xff1f; 答案是不但可以&#xff0c;而且习惯以后&#xff0c;会用上瘾的。通过传递不同的函数指针&#xff0c;我们可以实现在函数中调用不同的子函数。 下面就举个栗子…

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

在大家刚开始学习c语言的时候&#xff0c;总是分不清函数指针和指针函数&#xff0c;就算是知道了它们之间的区别&#xff0c;也不了解它们的使用场景&#xff0c; 我写此博客帮大家缕一缕&#xff0c;也帮我自己缕一缕 1、函数指针与指针函数的概念以及区别 指针函数 从名…

C语言 函数指针做函数参数(即回调函数)

文章目录 函数指针做函数参数(回调函数)回调函数概念一般有三种调用方式回调函数的作用回调函数调用时刻回调函数的语法&#xff1a;1.简单的函数类型为&#xff1a;无参数、无返回值的函数。2.完全形式的回调函数注&#xff1a; 代码案例&#xff1a;模拟计算器 函数指针做函数…

C语言 函数指针

一.前言 最近学了一点函数指针的东西 感觉还是比较有意思的 在某先方面用起来也确实会方便些 给大家在这里分享一下。 二.定义 函数指针就是指向代码段中函数入口地址的指针。 从上述这句话就可以看出 函数指针的本质是一个指针&#xff0c;只不过是指向函数的指针。 三.声明形…

C语言函数指针用法

C语言函数指针用法 函数指针本质上是指针&#xff0c;它指向一个函数。 例如int (*p)(int); – 从 p 处开始, 先与指针结合, 说明 p 是一个指针, 然后与()结合, 说明指针指向的是一个函数, 然后再与()里的 int 结合, 说明函数有一个int 型的参数, 再与最外层的 int 结合, 说明…

C语言函数指针详解

1、概念 函数指针就是一个指针&#xff0c;指针指向某个内存区域&#xff0c;函数指针就是指向函数入口地址的这么一个指针变量&#xff0c;在.c文件中编写一个函数&#xff0c;将.c编译为可执行程序后&#xff0c;在.c文件中编写的函数会存放在可执行程序的代码段中&#xff…

C语言——函数指针

函数指针 C语言中的指针类型有很多种&#xff0c;但是函数指针可能有些小伙伴没听过&#xff0c;下面我们引入一段定义。 函数指针是指向函数的指针变量。 因此“函数指针”本身首先应是指针变量&#xff0c;只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型…

《信号与系统》小结

参考书目&#xff1a;《信号与系统(第四版) 徐亚宁 苏启常 编著》 信号与系统 信号是消息的表现形式&#xff0c;消息是信号的具体内容。也就是说任何可以承载某种消息的物理量都可以是信号。电信号只是生活中最快捷&#xff0c;也是最常用的一种。我们可以从变化的电流或电压…

信号与系统(一) 信号与系统的基本概念

1.1信号的描述 信号的描述方式采用的有3种——函数、图形和数据 1.2信号的大小 对于一个信号x(t)&#xff0c;它的能量大小为&#xff0c;但是当&#xff0c;而信号的强度不趋向于0时&#xff0c;信号能量为无限大&#xff0c;这时候就需要使用信号的功率来判断大小&#xf…

连续系统分析【信号与系统四】

连续系统分析 一、已知描述连续系统的微分方程&#xff0c;计算该系统的响应并与理论结果比较二、研究具有以下零极点的连续系统2.1 1个极点s-0.1&#xff0c;增益k12.2 1个极点s0&#xff0c;增益k12.3 2个共轭极点 &#xff0c;增益k12.4 2个共轭极点 &#xff0c;增益k12.5 …

信号与系统_第二章 连续系统的时域分析

第二章 连续系统的时域分析 ( 连续系统在时域上进行分析 ) 2.1 引言 2.2 LTI系统的微分方程表示及响应 2.3 零输入响应与零状态响应 2.4 单位冲激响应 2.5 卷积积分 2.6 卷积积分的性质 2.7 奇异函数 2.8 连续时间系统的模拟 习题 2.01_连续系统的描述: 电路图建立微分…

《信号与系统》解读 第1章 信号与系统概述-1:信号与系统的描述和分析方法

目录 1. 什么是广义的信号和系统 2. 什么是狭义的电信号和电系统 3. 两个研究对象&#xff1a;信号系统 4. 两种分析方法&#xff1a;几何图形法数学函数法 5. 两个维度与视角&#xff1a;时域频域 6. 两种坐标&#xff1a;实平面复平面 7. 目标&#xff1a;模拟信号处理…

【信号与系统学习笔记 3】—— 系统,以及系统的性质以及判断方法解析

文章目录 一、系统的分类二、系统的性质2.1 记忆性和无记忆性2.2 可逆性与可逆系统2.3 稳定性2.4 因果性2.5 时不变性2.7 线性性 一、系统的分类 其实&#xff0c;系统的分类无非就是两大类&#xff1a;离散时间系统、一个是连续时间系统 那么&#xff0c;如何判断呢&#xf…

信号与系统知识点记录(P2-P3)

P2: 连续余弦信号和离散余弦信号的不同。 周期不同。 时移和相位关系不同。 还有个有趣的性质&#xff0c;离散信号里面&#xff0c;频率相差2Π的整数倍&#xff0c;得到的离散信号是一样的。 后面又实数的指数信号和复数的指数信号的推导过程 离散脉冲函数在信号和系统里…

信号与系统_第2章 连续系统的时域分析

2.1 LTI连续系统的响应 前言 LTI连续系统的时域分析&#xff0c;归结为&#xff1a;建立并求解线性微分方程。 由于在其分析过程涉及的函数变量均为时间t&#xff0c;故称为时域分析法。这种方法比较直观&#xff0c;物理概念清楚&#xff0c;是学习各种变换域分析法的…

数字信号处理:重要知识点整理

文章目录 0 最重要&#xff01;DFT和FFT的区别1 连续时间信号频域分析2 通过离散时间信号的Z变换表达式X(z)直接写出时域离散信号&#xff08;序列&#xff09;x(n)的方法3 部分分式法的MATLAB实现&#xff08;求X(z)的部分展开式&#xff09;4 稳定系统5 求频响特性&#xff0…

信号与系统常见问题总结(1)

在做题中遇到的一些问题和解决方案。 信号与线性系统 1.三大变换的正变换和逆变换2.变换的时候注意看是单边还是双边变换。3.对信号进行基本的尺度变换的顺序&#xff0c;先平移&#xff0c;再反转&#xff0c;再压缩。4.怎么判断系统的特性 --线性&#xff0c;时变&#xff0c…

领悟《信号与系统》之 信号与系统概论

信号与系统概论 一、信号与系统基本概念0. 信息是什么&#xff1f;1. 信号是什么&#xff1f;2. 系统是什么&#xff1f;3. 信号与系统学的什么&#xff1f; 二、常见的信号与系统实例三、信号与系统分析的意义 在《信号与系统》中&#xff0c;这个学科把真实的物理情况抽象出来…

信号与系统复习归纳(二):连续时间信号和系统+例题

目录 1 连续时间信号的变换2 信号的性质3 复指数函数的性质4 奇异函数5 信号的数学函数6 连续时间系统7 连续时间系统的性质参考文献 1 连续时间信号的变换 实变量实函数的六种基本变换&#xff1a; &#xff08;1&#xff09;时间反转变换&#xff08;关于独立变量t&#xff…