当前位置: 首页 > 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);

http://www.xdnf.cn/news/37027.html

相关文章:

  • Linux系统编程 day6 进程间通信mmap
  • 单片机AIN0、AIN1引脚功能
  • PyTorch `flatten()` 和 `squeeze()` 区别
  • 专题十六:虚拟路由冗余协议——VRRP
  • 记一次Utuntu装完无法联网问题
  • 事件冒泡与捕获
  • 【愚公系列】《Python网络爬虫从入门到精通》055-Scrapy_Redis分布式爬虫(安装Redis数据库)
  • JSAPI2.1-DOM基础
  • 使用Service发布前后端应用程序
  • 软件测试行业核心知识点的系统化梳理
  • 【Matlab】中国沿岸潮滩宽度和坡度分布
  • 2025年KBS SCI1区TOP:增强天鹰算法EBAO,深度解析+性能实测
  • 【数据结构_11】二叉树(3)
  • NestJS——使用TypeORM连接MySQL数据库(Docker拉取镜像、多环境适配)
  • 【大模型】 LangChain框架 -LangChain实现问答系统
  • 基于UNet算法的农业遥感图像语义分割(下)
  • AF3 unify_alignment_db_indices脚本解读
  • QT+Cmake+mingw32-make编译64位的zlib-1.3.1源码成功过程
  • Spring中的AOP基础理解
  • 探秘 C++ 内存管理:从虚拟内存到内存池的深度解析与实战应用
  • 【AI提示词】物理学家
  • 【信息系统项目管理师】高分论文:论信息系统项目的干系人管理(商业银行绩效考核系统)
  • 力扣算法ing(60 / 100)
  • 苍穹外卖项目中所涉及到的测试内容
  • 大模型Rag - 向量数据库索引
  • Docker应用端口查看器docker-port-viewer
  • 筑基挑战 | 第14期
  • 数字孪生火星探测车,星际探索可视化
  • 解码 Web Service:从技术原理到应用场景的深度剖析
  • 可以直接本地使用的Python环境可以调用的AI大模型归纳整理(AI辅助)