当前位置: 首页 > article >正文

【C语言】_函数指针变量

关于指针变量,本专栏相关文章链接如下:

【C语言】_指针变量_c语言指针变量-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/m0_63299495/article/details/144883068【C语言】_字符数组与常量字符串-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/m0_63299495/article/details/145016708【C语言】_指针数组和数组指针-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/m0_63299495/article/details/145033052本文介绍函数指针变量。

1. 函数名与&函数名

#include<stdio.h>
int Add(int x, int y) {
	return x + y;
}
int main() {
	printf("&Add = %p\n", &Add);
	printf(" Add = %p\n", Add);
	return 0;
}

运行结果如下:

注:对于函数,函数名=&函数名,均表示函数的地址

请注意区别于数组名与&数组名,相关内容参考下文:

【C语言】_指针与数组-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/m0_63299495/article/details/144947245

2. 函数指针的定义

2.1 从数组指针到函数指针

#include<stdio.h>
int Add(int x, int y) {
	return x + y;
}
int main() {
	// array pointer
	int arr[5] = { 1,2,3,4,5 };
	int(*pa)[5] = &arr;
	// function pointer
	int(*pf)(int,int) = &Add;
	return 0;
}

2.2 定义函数指针

#include<stdio.h>
int Add(int x, int y) {
	return x + y;
}
char test1(float m,float n) {
	return m > n ? 'Y' : 'N';
}
char* test2(char a, char b) {
	return a > b ? &a : &b;
}
int main() {
	int(*pf1)(int, int) = &Add;
	char(*pf2)(float, float) = &test1;
	char* (*pf3)(char, char) = &test2;
	return 0;
}

以test3为例,对char* (*pf3)(char, char) = &test2 理解如下:

char* 表示test2函数返回值类型为char* ,

(*pf3) 表示pf3为指针变量,且指针变量名为pf3,

(char, char)表示test2函数的参数类型及参数个数;

3. 通过函数名与函数指针调用函数

#include<stdio.h>
int Add(int x, int y) {
	return x + y;
}
int main() {
	int num1 = Add(8, 5);
	printf("%d\n", num1);

	int (*pf)(int, int) = &Add;
	int num2 = (*Add)(8, 5);
	printf("%d\n", num2);
}

运行结果如下:

注:使用函数指针调用函数时,可解引用调用(上例),也可不解引用调用:

#include<stdio.h>
int Add(int x, int y) {
	return x + y;
}
int main() {
	int (*pf)(int, int) = &Add;
	int num2 = (*Add)(8, 5);
	int num3 = Add(8, 5);
	printf("%d\n", num2);
	printf("%d\n", num3);
}

运行结果如下: 


http://www.kler.cn/a/487524.html

相关文章:

  • api开发如何在代码中使用京东商品详情接口的参数?
  • python【数据结构】
  • 【MySQL 保姆级教学】用户管理和数据库权限(16)
  • nginx 日志规范化意义及实现!
  • 解决HBuilderX报错:未安装内置终端插件,是否下载?或使用外部命令行打开。
  • React+redux项目搭建流程
  • mac 窗口工具Teleport和Rectangle
  • 微信小程序——创建滑动颜色条
  • thinkphp6.0常用设计模式实例
  • 基于滑动窗口的限流方案
  • cv2.imwrite保存的图像是全黑的
  • React PureComponent使用场景
  • 基于SpringBoot的时间管理系统设计与实现
  • Spring Boot + MyBatis Plus 存储 JSON 或 List 列表全攻略
  • matlab离线安装硬件支持包
  • WPF连接USB相机,拍照,视频 示例
  • 《Spring Framework实战》4:Spring Framework 文档
  • Qt仿音乐播放器:媒体类
  • 降噪去噪学习流程和算法分类总结
  • 6 分布式限流框架
  • 蓝桥杯 第十五届 研究生组 B题 召唤数学精灵
  • C# 使用iText 编辑PDF
  • Golang学习笔记_23——error补充
  • AI绘画:Midjourney和stable diffusion到底有什么区别?
  • 基于单片机的空调温度测试测控系统设计
  • es 单个节点cpu过高