C语言函数指针详解

article/2025/9/29 3:37:12

1、概念

函数指针就是一个指针,指针指向某个内存区域,函数指针就是指向函数入口地址的这么一个指针变量,在.c文件中编写一个函数,将.c编译为可执行程序后,在.c文件中编写的函数会存放在可执行程序的代码段中,入口地址就在这,先贴代码,再慢慢分析:

#include <stdio.h>int val = 1;void Test(int a)
{printf("In Test a = %d\n", a);   
}void Test111(int a)
{printf("In Test111 a = %d\n", a);   
}void Formal(void(*p)(int))
{printf("In Formal Call:\n"); (*p)(10);
}void Formal111(void(**pp)(int))
{printf("In Formal111 Change p\n");(*pp) = Test111;(**pp)(10);
}int main()
{int step;// 函数指针声明void(*p)(int);// 函数指针赋值p = Test;printf("Input 1 to Dsp Addr\n");printf("Input 2 to Dsp Call\n");printf("Input 3 to Dsp Formal parameter1\n");printf("Input 4 to Dsp Formal parameter2\n");while(1){scanf("%d", &step); printf("****************************\n");if(step == 1)       // 地址展示{printf("Test = %p\n", Test);printf("p    = %p\n", p);printf("&val = %p\n", &val);}else if(step == 2)  // 调用展示{(*p)(10);}else if(step == 3)  // 形参展示1{Formal(p);}else if(step == 4)  // 形参展示2{Formal111(&p);}else{printf("Input Num Must From 1 To 4\n");}printf("****************************\n");}return 0;
}

2. 代码分析

2.1 准备

保存上面的代码,命令为a.c,执行编译命令:gcc a.c -o test

2.2 入口地址分析

为了方便理解,我们定义了一个初始化的全局变量 val ,当定义指向该变量指针的时候就是指向其地址,初始化的全局变量存在于数据段,执行objdump -j .data -S test反编译程序数据段可以查看val的存放地址:

 同理,我们定义的函数指针指向Test函数的入口地址,该函数存放在代码段,执行命令objdump -j .text -S test 进行反编译查看:

 接下来将程序跑起来,输入数字1可以查看地址:

2.3 函数指针声明调用

了解了函数指针的本质后,来看下函数指针的声明,声明就是按样式来:

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

示例中Test函数返回值为void参数入参为一个int类型数据,因此声明即为:void (*p)(int)

调用函数就是把(*p)这个当做函数名称Test来使用即可,输入数字2查看调用:

2.4 函数指针作为形参

函数指针作为形参时,就是把你声明的那一堆东西扔进形参列表里就行了, 像示例中void Formal(void(*p)(int))这样即可,输入数字3查看该函数执行:

2.5 函数指针的指针

多说一下函数指针的指针,和指针的指针一样,可以改变指针本身,输入数字4改变函数指针指向,再输入数字2可以查看指针指向已经改变了

 


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

相关文章

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…

领悟《信号与系统》之 信号与系统的描述-下节

信号与系统的描述-下节 一、信号的基本运算1. 信号的基本运算1. 加法 、减法2. 乘法、除法3. 微分 、差分4.积分、迭分 2. 关于时间&#xff08;自变量&#xff09;的运算1. 位移2. 反折3. 尺度变换 二、阶跃信号与冲激信号1. 单位阶跃信号2. 单位阶跃信号的特性3. 单位冲激信号…

信号与系统第一章--基本知识

1.信号的基本概念 1.1信号分类 确定信号&#xff1a;可用确定时间函数表示的信号 &#xff08;电流 电压 fx&#xff09; 随机信号&#xff1a;不能用确定的函数描述&#xff0c;只可能知道它的统计特性。如概率 &#xff08;雷电干扰信号&#xff09; 1.1.1确定信号的分类&…

【信号与系统】(一 )信号与系统概述——信号的基本概念与分类

文章目录 第一章 信号与系统概述1.1 信号的基本概念与分类1.1.1 消息、信息、信号1.1.2 信号的描述1.1.3 信号的分类1.1.3.1 确定信号和随机信号1.1.3.2 连续信号和离散信号1.1.3.3 周期信号与非周期信号1.1.3.4 能量信号和功率信号1.1.3.5 因果信号和反因果信号1.1.3.6 一维信…

信号与系统复习概括

本文是针对自己信号与系统理解不够透彻的一些知识点的梳理&#xff0c;仅供自己学习使用&#xff0c;内容可能有些杂乱。 一、信号与系统总体描述 Q1:信号与系统这门课程讲了什么&#xff1f; 主要从输入-输出描述法出发&#xff0c;研究确定性信号经线性时不变系统&#xff0c…

信号与系统_定义总结

在连续的时间范围内(-∞< t <∞&#xff09;有定义的信号称为连续时间信号&#xff0c;简称连续信号。 在连续的时间范围内(-∞< t <∞&#xff09;有定义的信号称为连续时间信号&#xff0c;简称连续信号。 定义在(-∞&#xff0c;∞)区间&#xff0c;每隔一定时…

信号与系统基础简单知识概括

连续时间和离散时间信号 定义 1、自变量连续可变的信号为连续时间信号或 者模拟信号。 2、自变量离散的信号为离散时间信号。 时移 左加右减 时反 尺度变换 原信号为&#xff1a;x(t) 经过尺度变换后的信号为&#xff1a; x&#xff08;t&#xff09;x&#xff08;at&#…