C语言:函数指针变量

【C语言】指针变量指向正确的内存单元(指针初步理解 指针变量初始化)| C语言面试:解释一下C语言中的函数指针和回调函数的概念及用法。 案例: 同上条博客,建议在定义任何变量时,都应该遵循变量定义的【规范性】。 #include <stdio.h> int main(){ int a=0,b=8; char c='K'; int* pa,*pb; //若这里pb前面不带*号,程序第8行将报错。[Error] invalid conversion from 'int*' to 'int' char *pc; pa=&a; pb=&b; pc=&c; printf("a is %d, &am 阅读详情

一、什么是函数指针变量

函数指针变量是指向函数的指针,它允许将函数的地址作为数据存储在变量中。在C语言中,函数名代表函数的地址,因此可以使用函数指针变量来指向某个函数,并通过该指针调用相应的函数。

下面我们来看一个简单的示例,说明函数也是有地址的:

//函数的地址
#include<stdio.h>

void test()
{
	printf("Hello World!\n");
}

int main()
{
	printf("test = %p\n", test);//使用%p来打印地址
	printf("&test = %p\n", test);

	return 0;
}

允许结果如下: 

test = 00007FF6FBBF1159
&test = 00007FF6FBBF1159

注:在不同电脑上的允许结果不同,但test和&test一定相同。

二、函数指针变量的声明

在C语言中,函数指针变量的声明形式如下所示:

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

其中,返回类型是函数返回的数据类型,参数类型列表是函数接收的参数类型。 

三、函数指针变量的使用

通过函数指针调用指针指向的函数。

下面是一个示例,演示了函数指针变量的用法:

#include<stdio.h>

//函数指针的使用
int add(int x,int y)
{
	return x + y;
}

int subtract(int x, int y)
{
	return x - y;
}

int main()
{
	int (*funcPtr)(int, int);//声明一个函数指针变量,指向接收两个整型参数并返回整数的函数

	funcPtr = add;//将函数指针指向add函数
	printf("调用add函数:%d\n", funcPtr(6, 8));

	funcPtr = subtract;//将函数指针指向subtract函数
	printf("调用subtract函数:%d\n", funcPtr(8, 6));

	return 0;
}

运行的结果为:

调用add函数:14
调用subtract函数:2

更多C语言相关练习请访问:test_c: C语言练习,包括常见语法练习以及小项目练习。 (gitee.com)

多租户Saas架构设计分析(基础篇) 本篇先给大家介绍一下相关的概念和常见问题。 实践篇链接:https://blog.youkuaiyun.com/haponchang/article/details/104246317 SaaS简介 SaaS是Software-as-a-Service(软件即服务)的简称,“软件即服务”?是不是有点拗口?其实你就理解成为“按需租用别人提供的软件服务”就可以了,它是一种软件交付模式。... 阅读详情

相关推荐

硬件测试之—纹波测试为什么不要使用接地夹子

示波器为什么不推荐使用接地夹

qq_19294353的博客 2988

C语言——函数指针——函数指针变量(详解)

函数指针是指向函数的指针变量。它可以用来存储函数的地址,从而可以通过指针调用函数。返回类型 (*指针变量名)(参数列表);其中,返回值类型是函数的返回值类型,指针变量名是函数指针的名称,参数列表是函数的参数类型和个数。例如,我们有一个函数 add,它接受两个整数参数并返回它们的和。我们可以声明一个函数指针 p 来指向该函数:// 声明一个函数指针变量pp = add;// 将函数add的地址赋值给p// 通过函数指针调用add函数。

Jason_from_China的博客 2361

【白话系列】倍增算法

【序言】         我认为吧,所有能够优化复杂度的算法都是神奇的,所有能够化繁琐为形象的文字都是伟大的。一直觉得倍增算法是个很神奇的东西,所以决定写点东西纪念一下它。但是作为一个非常不称职的OIER,我非常讨厌在看别人的算法解析时整版的i,j,k等我看到鼠标就惯性移到右上角的符号语言,所以我想用最形象的方式来纪念它。 【一】         从前,有一只可爱得不得了的小白兔,它想从

JarjingX 3万+

函数指针变量

C语言作为一门面向过程的语言,那么他的代码块一般是以函数为最小单位的,我们了解过栈帧之后都知道,代码也是有地址的,那么存放代码地址的变量就叫做函数指针变量。 对于一个函数而言,函数名或者&amp;函数名都代表的是这个函数的地址。 那么这个地址怎么保存呢?请看下面的代码: void test() { printf("Hello\n"); } int main() { voi...

zym1348010959的博客 2835

SAP CO实战:如何用KKA2/CJ88结果分析码搞定项目收入成本匹配(附真实案例)

本文深入解析了SAP CO模块中结果分析码KKA2/CJ88的核心应用,通过真实案例详细阐述了如何在成本波动剧烈的销售型项目中,运用结果分析实现收入与成本的精准匹配。文章重点拆解了不同结果分析方法的适用场景与财务影响,并提供了从配置、操作到问题排查的完整实战指南,帮助财务顾问提升项目财务管理能力。

qsc9012345的博客 606

Pytest 常见问题及其解决方案

Pytest 是一个强大且灵活的测试框架,但初学者在使用过程中难免会遇到各种问题。希望通过这篇文章,你能更好地应对常见的挑战,写出更高效、更稳定的测试代码。测试不是负担,而是保障。写好测试不仅能提高代码质量,还能让你在面对变更时更加从容自信。

qq_52137592的博客 899

C语言 ——函数指针变量、函数指针数组、回调函数

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

2301_76445610的博客 1380

【智能车学习】电磁循迹中的基本控制算法

今天心血来潮,突然想总结一下电磁车的一些基本算法,也希望可以给新手同学们一点帮助和参考。本篇主要讲述智能车电磁循迹中涉及到的基本算法,包括滤波算法,归一化算法,PID控制等

Carry_qing的博客 6万+

C语言 函数指针变量、函数指针数组

那么函数是否有地址呢?做一个小测试。输出结果如下:确实能打印出地址来,所以函数是有地址的,

2302_79182777的博客 291

代谢组数据分析(三):代谢组降维分析

本文详细介绍了代谢组学中常用的降维分析方法,包括PCA、PLS-DA和OPLS-DA。PCA通过线性变换降低数据维度,便于数据可视化和异常值检测;PLS-DA是一种有监督的模式识别方法,适用于分类和预测;OPLS-DA通过正交分解避免过拟合,更准确地筛选差异代谢物。降维分析在揭示样本间差异和发现生物标志物方面具有重要意义

专注生信领域 3790

YOLOv12改进策略【卷积层】| CVPR-2020 利用DynamicConv 动态卷积 结合A2C2f进行二次创新,提高精度

在大规模视觉预训练中,通常模型的性能受到数据、参数和FLOP三个关键因素的影响。一般来说,模型的参数数量越多,FLOP也越高,但在移动设备等对计算资源有限制的场景下,需要低FLOP的模型同时又希望模型能从大规模预训练中受益。传统的方法很难在增加参数的同时保持低FLOP,因此需要一种新的设计来解决这个问题,模块应运而生。

Limiiiing的博客 827

指针型函数和函数指针变量

一、指针型函数 1.在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。 返回指针的函数的一般形式为:类型名 * 函数名(参数列表) #include <stdio.h> int *findNum(int a[], int len, int num); int main(void) { int arr[] = {1,2,3,56,78}; int num; printf("请输入一个整数:\n"); scanf("%d",

laolitou_ping的博客 2125

【Unity小游戏】整整一个周末写一款《皇室战争 玩法》 的 即时战斗类 游戏Demo。两万多字游戏制作过程+解析

Unity游戏制作,本篇文章介绍了复刻皇室战争玩法的一个自制小游戏,共有该游戏的两万字教程加制作过程,欢迎品尝! 世界上没有绝对的公平,如果我们起点就比别人第一步,那就更需要比别人努力了。

努力前行,总会成为自己心中的那道光 12万+

【C语言】:详解函数指针变量,函数指针数组及转移表

什么是函数指针变量呢? 前面我们已经了解了整型指针与函数指针,通过类比我们可以知道:函数指针变量是用来存放函数的地址的,未来通过地址能够调用函数。那么函数是否有地址呢?并且通过类比数组,函数名与&函数名的值是否有区别呢? 我们来测试一下: 输出结果:我们发现两者的值是一模一样的。 我们知道数组名一般表示首元素地址,&数组名表示整个数组的地址,两者的值虽然一样,但是意义是完全不同的。 而函数名和&函数名表示的都是函数的地址,两者的意义完全相同,没有区别。如果我们要将函数的地址存放起来,就必须要创建函数指针变量

2301_77900444的博客 1263

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【C语言】——指针四:字符指针与函数指针变量

对字符指针与函数指针有疑惑?快快看过来!

yusjushd的博客 1808

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

每日一个C语言知识:函数指针变量及typedf关键字使用

本文介绍了函数指针变量的概念、创建与使用方法。文章首先验证了函数地址的存在性,展示了函数指针变量的声明方式及类型解析。通过代码示例演示了通过函数指针调用函数的多种方式。随后分析了两段复杂代码,引入typedef关键字简化函数指针类型声明。文章重点讲解了函数指针数组和转移表的概念,通过计算器案例对比了传统switch-case实现与使用函数指针数组的优化方案。最后补充了回调函数的实现原理,通过图解说明回调函数如何通过函数指针实现函数间的灵活调用。全文循序渐进地阐述了函数指针的核心概念及实际应用场景。

2501_93557147的博客 819

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【C语言入门】函数指针:定义与使用(指向函数的指针变量)

函数指针是C语言中一种强大的特性,允许将函数作为变量传递和调用。理解函数指针需要掌握指针和函数的基础知识。指针存储内存地址,而函数在内存中也有固定地址,可以通过指针访问。函数指针的声明需明确返回值类型和参数列表,初始化时可直接赋值函数名或显式取地址。通过函数指针调用函数有两种方式,推荐直接使用指针变量名调用。函数指针的类型必须与目标函数完全匹配,否则会导致编译错误。函数指针的高级用法包括函数指针数组、二级函数指针和回调函数,这些技术提高了代码的灵活性和复用性。

Mr_-G,一名勤奋底层软件开发工程师的博客 2558

浅谈C语言中的指针:指针变量大小、const修饰、指针加减、野指针、数组传参本质、函数指针、转移表(函数指针数组)

我们思考函数的形参是实参的临时拷贝,那么再函数内部进行变量交换时交换的时形参的数值,而实际参数依旧没变。为解引用操作符,将指针解开之后,编译器会按指针类型进行读取内存,例如整形指针解开之后编译器会按照指针所指向的位置往后读取4个字节,这样就可以像平常一样使用变量。,将各个函数的入口整合起来,这样可以少写很多if判断该用哪个函数,即创建一个数组,数组的类型是函数指针类型,数组的每一个元素都是一个函数的指针。那么在数组传参的时候,传递的是数组名,也就是说本质上数组传参传递的是数组⾸元素的地址。

暖焰核心的博客 643

从Anyview数据结构习题看C语言基础:手把手教你理解变量交换、函数指针与结构体

本文通过Anyview数据结构习题深入解析C语言核心概念,包括变量交换的三种方法、函数指针的高级应用以及结构体的内存优化技巧。文章结合实战案例,帮助开发者掌握链表系统构建、错误处理与性能优化等关键技能,提升C语言编程能力与工程实践水平。

weixin_30566063的博客 431

C语言指针深入详解(四):指针变量、二维数组传参的本质、函数指针数组、转移表

前面几篇文章介绍了c语言的一些知识,包括循环、数组、函数、VS实用调试技巧、函数递归、操作符等,在这篇文章中,我将继续介绍指针的一些重要知识点!由于指针的内容较多,博主将会分为六篇博客介绍,这是第四篇啦!对指针感兴趣的友友们可以在评论区一起交流学习!

艾莉丝努力练剑的博客,感谢大家一直以来的对艾莉丝的支持和鼓励,uu们如果对C/C++方向感兴趣的话,可以通过艾莉丝主页的微信名片加艾莉丝的好友,和努力练剑的艾莉丝一起加油! 1630

【c语言进阶】三分钟教会你终极套娃:指向函数指针数组的指针,让你真正理解如何解读一个变量的类型

【c语言进阶】三分钟教会你终极套娃:指向函数指针数组的指针,让你真正理解如何解读一个变量的类型

睿的博客 458

c语言函数指针变量

看上面这个图片,pf就是函数指针变量,是用来存放函数地址的,而前面int和int*取决于指向函数的类型,不难看出,Add类型是int的,而test的类型是int*的,而(int,int)与(int,char*)取决于指向函数形参的类型,只需要写类型即可,不需要写变量。这是打印的结果,可知&Add与Add的效果是一样的,也就是说函数名也是函数的地址,而pf中存放着Add的地址,pt中存放着test的地址,所以函数的地址是存在的。总得来说这就是一次函数的调用,调用的是0地址处的一个函数。

2601_94861874的博客 533

【C语言】用函数指针变量完成:输入两个整数,让用户选择函数,选择1输出较大的数,选择2输出较小的数

//用函数指针变量完成:输入两个整数,让用户选择函数,选择1输出较大的数,选择2输出较小的数 #include int max(int x,int y) { return (x>y)?x:y; } int min(int x,int y) { return (x>y)?y:x; } int main() { int (*p)(int,int); int a,b,c,n; printf(

韩豆豆的博客 5491

定义函数指针的三种方式 C语言

函数指针定义方式(先定义函数类型,根据类型定义指针变量); 先定义函数指针类型,根据类型定义指针变量; 直接定义函数指针变量; int my_func(int a,int b){ printf("ret:%d\n", a + b); return 0; } //1. 先定义函数类型,通过类型定义指针 void test01(){ typedef int(FUNC_TYPE)(int, int); FUNC_TYPE* f = my_func; //如何调用? (*f)(10, 20)..

一位打工仔的博客 9599

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

本文详细介绍了C语言中的指针函数和函数指针的概念及区别。指针函数是一个返回指针的函数,而函数指针是一个指向函数的指针变量。文中通过实例代码解释了两者的定义、用法和如何通过它们调用函数。此外,还探讨了指针的指针和指向指针数组的指针的应用,帮助读者深入理解C语言中指针的高级用法。

让你爱上电路设计 2万+

函数指针c语言typedef,typedef 函数指针的用法(附例子)

在网上搜索函数指针,看到一个例子。开始没看懂,想放弃,可是转念一想,这个用法迟早要弄懂的,现在多花点时间看懂它,好过以后碰到了要再花一倍时间来弄懂它。其实很多时候都是这样,如果每次到难一点的内容,总想着下次我再来解决它,那就永远也学不到东西。后面那个例子加了注释,是我对这种用法的理解,希望对新手有所帮助。进入正文:代码简化, 促进跨平台开发的目的.typedef 行为有点像 #define 宏,用...

weixin_42499586的博客 1149
上一篇: 二维数组传参的本质
下一篇: typedef关键字
Jett_Lin
博客等级 码龄5年 305粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值