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

指针函数和函数指针

指针函数本质是一个函数,只是函数的返回值是指针类型

函数指针本质是一个指针,只是这个指针指向的是一个函数


  1. 指针函数

函数有很多类型的返回值,例如

short funcA(参数列表) // 表示该函数返回值是一个short类型

void funcA(参数列表) // 表示该函数返回值是一个void类型,也就是没有实际返回值

char* funcA(参数列表) // 表示该函数返回值是一个char类型指针

语法:
数据类型* 函数名(参数列表);
示例:
#include <stdio.h>
// 定义一个指针函数,返回一个指向char的指针char* step1() {
static char* data = (char*)"I am step1.\n";
return data;
}char* step1() {
static char* data = (char*)"I am step1.\n";
return data;
}char* step2() {
static char* data = (char*)"I am step2.\n";
return data;
}int main() {
char* ptr = NULL;
ptr = step1(); // 获取step1函数返回值
printf("Value: %s\n", ptr); 
ptr = step2(); // 获取step1函数返回值
printf("Value: %s\n", ptr);
return 0;
}

输出

Value: I am step1.
Value: I am step2.

在上面的例子中,函数的返回值是一个字符串,常规类型的返回值是无法满足的,通过指针就很容易实现。


  1. 函数指针

指针是内存的一个地址,这个地址可以存变量,也可以存储的是函数,

当指针指向的是一个函数的首地址,该指针就可以叫做函数指针。

语法:
返回类型 (*指针变量名)(参数列表);
示例:
#include <stdio.h>// 定义一个普通函数
int add(int a, int b) {
return a + b;
}int main() {
// 定义一个函数指针,指向返回值为 int,参数为两个 int 的函数
int (*funcPtr)(int, int);// 将函数指针指向 add 函数
funcPtr = &add;// 通过函数指针调用函数
int result = funcPtr(3, 5); // 等价于 add(3, 5)
printf("Result: %d\n", result); // 输出:Result: 8
return 0;
}

上面的例子中可以看到:

  • funcPtr是一个指向函数的指针,该函数的返回值是int ,有两个int 类型的参数
  • funcPtr = &add的目的就是将指针funcPtr 指向 add 函数

指针函数 vs 函数指针

特性

指针函数

函数指针

定义

返回指针的函数,这个一个函数,函数的返回值是指针

指向函数的指针变量,这是一个指针

需要指向一个对应的函数才能使用

语法

数据类型* 函数名(参数列表);

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

目的

作用是返回函数中某一参数的地址

作用是获取函数的地址

示例

int* func();

int (*funcPtr)(int, int);

相关文章:

  • C++游戏服务器开发之⑦redis的使用
  • MAUI项目iOS应用以进 App Store 分发
  • 免费将AI生成图像放大4倍的方法
  • 图像预处理-绘制图像轮廓与凸包
  • PyTorch `flatten()` 和 `squeeze()` 区别
  • c++ 类的语法1
  • 大学英语四级选词填空练习题解析
  • asp.net core webapi+efcore
  • 实现AWS Step Function安全地请求企业内部API返回数据
  • Windows Server .NET Core 应用程序部署到 IIS 解决首次访问加载慢的问题
  • 谷歌称LLMs.txt类似于关键词元标签:SEO影响与应对策略
  • 【轻松学会使用Redis基础命令】
  • 数据结构实验7.2:二叉树的基本运算
  • 直线轴承的正确安装方式是什么?
  • 服务治理-服务发现和负载均衡
  • Windows使用SonarQube时启动脚本自动关闭
  • 详解与HTTP服务器相关操作
  • (9)VTK C++开发示例 --- 计算两点之间的距离
  • 分享一个DeepSeek+自建知识库实现人工智能,智能回答高级用法。
  • 精益数据分析(4/126):开启数据驱动的创业之旅
  • 为博眼球竟编造一女孩被活埋,公安机关公布10起谣言案件
  • 正义网评“一男两女举办婚礼”:“一夫多妻”流量闹剧该歇了
  • 又有多名券商员工考公转型,近两年证券从业人员数量减逾7%
  • 十四届全国政协教科卫体委员会副主任杨小伟被查
  • 国际秩序危机下,德国如何重塑欧洲地缘政治
  • ​COP30候任主席答澎湃:走自己的务实道路,不依赖发达国家“标准答案”