C语言 ——— 函数指针的定义 & 函数指针的使用

目录

何为函数指针

[打印 函数名的地址 及 &函数名的地址](#打印 函数名的地址 及 &函数名的地址)

函数指针的代码(如何正确存储函数地址)

函数指针的使用


何为函数指针

类比:

整型指针 - 指向整型数据的指针,整型指针存放的是整型数据的地址

字符指针 - 指向字符数据的指针,字符指针存放的是字符数据的地址

由此可得:
函数指针 - 指向函数的指针,函数指针存放的是函数的地址


打印 函数名的地址 及 &函数名的地址

回顾上次:C语言 --------- 数组指针的定义 & 数组指针的使用-CSDN博客

数组名的地址&数组名地址是相同的 ,那么 函数的地址&函数的地址 是否相同?


创建一个整型变量相加的Add函数:

复制代码
int Add(int x, int y)
{
	return x + y;
}

打印Add函数的地址 以及 &Add函数的地址:

由此可见,函数名的地址 和 &函数名的地址 是相同的


那么 函数地址 如何存储在 函数指针 中?

函数指针的代码(如何正确存储函数地址)

复制代码
int (*pAdd)(int, int) = &Add;

解析代码:

Add函数的返回值和参数:int Add(int x, int y)

解析:int (*pAdd)(int, int) = &Add;

解析(*pAdd): 表明 pAdd是指针 ,由于 括号优先级 高于 *号 ,所以要将 *pAdd 括起来

去掉**(*pAdd)**,剩下的就是指针的类型

解析int (int, int):Add函数返回值是int参数是(int, int) ,表示 (*pAdd) 的类型是函数

小结:

函数指针的创建方式 类似于 数组指针


函数指针的使用

通过 函数指针 存放 函数的地址后 ,又如何通过 函数指针来使用函数

代码演示:

复制代码
#include<stdio.h>
int Add(int x, int y)
{
	return x + y;
}
int main()
{
	int (*pAdd)(int, int) = &Add;

	// 通过函数名使用函数
	int r = Add(3, 5);
	printf("3 + 5 = %d\n", r);

	// 通过函数指针使用函数
	int s = (*pAdd)(5, 10);
	printf("5 + 10 = %d\n", s);

	return 0;
}

代码解析:

解析:int s = (*pAdd)(5, 10);

pAddAdd函数 的地址,通过 *号 解引用 找到 Add函数,再(5,10)传参就能完成函数的使用了

代码验证:

相关推荐
FFZero111 分钟前
[mpv插件系统] (一) Lua 闭包与上值 — 从概念到 C API
c语言·junit·lua
秋越12 分钟前
从工程角度理解嵌入式C语言关键字
c语言·开发语言·嵌入式·嵌入式软件开发·嵌入式c语言·c语言关键字
代码地平线28 分钟前
C++ 入门篇类和对象·上篇:从本质深剖类与对象与C++基本用法
c语言·开发语言·数据结构·c++·笔记·算法
syker1 小时前
AIFerric 多硬件后端完整支持方案
c语言
社交怪人1 小时前
【三个数】信息学奥赛一本通C语言解法(题号2053)
c语言
Dovis(誓平步青云)4 小时前
《QT学习第四篇:常见事件与UDP、TCP、文件系统、(锁、信号量、条件变量》
c语言·开发语言·汇编·qt
.千余17 小时前
【C++】C++类与对象2:C++构造函数、运算符重载与流输入输出全面解析
c语言·开发语言·前端·c++·经验分享
QiLinkOS19 小时前
【用呼吸重构创造价值关系——QiLink生态】
c语言·数据结构·c++·人工智能·单片机·嵌入式硬件·算法
水无痕simon19 小时前
8 判断,分支,循环语句
c语言
朔北之忘 Clancy19 小时前
2026 年 3 月青少年软编等考 C 语言二级真题解析
c语言·开发语言·c++·学习·青少年编程·题解·考级