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

C语言函数指针实用总结

4e4ab432788c71bfe09006009d2d3a5f.jpeg

在C语言的广阔天地中,函数指针犹如一把神秘的钥匙,开启了一扇通往高级编程技巧的大门。本文将带你深入理解函数指针的概念、用法,并通过一系列案例,助你掌握这一强大的工具。准备好了吗?让我们一探究竟!

一、函数指针解析

1. 什么是函数指针?

在C语言中,指针可以指向变量,同样地,函数指针可以指向函数。函数指针存储了函数的地址,通过它可以间接调用函数。

2. 函数指针的定义

返回类型 (*函数指针名)(参数类型1, 参数类型2, ...);

例如,一个指向返回整型并接受两个整型参数的函数的指针可以这样定义:

int (*func_ptr)(int, int);

3. 函数指针的赋值

将函数名赋给函数指针时,不需要括号,因为函数名本身就是地址。

func_ptr = &function_name; // 或
func_ptr = function_name;

4. 通过函数指针调用函数

(*func_ptr)(参数1, 参数2);

或者更常见的写法:

func_ptr(参数1, 参数2);

二、函数指针的应用案例

案例1:函数指针作为参数

#include <stdio.h>int add(int a, int b) {return a + b;
}int subtract(int a, int b) {return a - b;
}void perform_operation(int a, int b, int (*operation)(int, int)) {printf("Result: %d\n", operation(a, b));
}int main() {perform_operation(10, 5, add);perform_operation(10, 5, subtract);return 0;
}

案例2:函数指针数组

#include <stdio.h>int add(int a, int b) {return a + b;
}int subtract(int a, int b) {return a - b;
}int multiply(int a, int b) {return a * b;
}int main() {int (*operations[3])(int, int) = {add, subtract, multiply};for (int i = 0; i < 3; i++) {printf("%d\n", operations[i](10, 5));}return 0;
}

案例3:回调函数

#include <stdio.h>void print_number(int num, void (*func_ptr)(int)) {func_ptr(num);
}void print_square(int num) {printf("Square of %d is %d\n", num, num * num);
}void print_cube(int num) {printf("Cube of %d is %d\n", num, num * num * num);
}int main() {print_number(5, print_square);print_number(5, print_cube);return 0;
}

案例4:模拟面向对象

#include <stdio.h>typedef struct {void (*set_value)(struct Number*, int);int (*get_value)(struct Number*);
} Number;void set_value(Number *n, int value) {n->value = value;
}int get_value(Number *n) {return n->value;
}struct Number {Number functions;int value;
};int main() {Number n;n.functions.set_value = set_value;n.functions.get_value = get_value;n.functions.set_value(&n, 10);printf("Value: %d\n", n.functions.get_value(&n));return 0;
}

三、总结

函数指针是C语言中一种强大的机制,它使得函数可以作为参数传递,可以作为返回值,甚至可以被存储在数组中。通过本文的解析和案例,我们看到了函数指针在实现回调函数、模拟面向对象特性等方面的应用。掌握函数指针,不仅能让你的代码更加灵活和高效,还能在解决复杂问题时提供更多的思路。

 


http://www.mrgr.cn/news/63071.html

相关文章:

  • python requests已解决Max retries exceeded with URL问题
  • Conmi的正确答案——在Kibana中进入Elasticsearch的索引管理页面
  • 【VS中Git同步提交 报错:访问.vs/FileContentIndex/xxx.vsidx权限不允许】
  • Swarm-LIO: Decentralized Swarm LiDAR-inertial Odometry论文翻译
  • 机器学习领域如何做小样本训练背后的原理和逻辑
  • 开源陪玩系统平台源码-支持游戏线上陪玩家政线下预约等多场景应用支持H5+小程序+APP
  • 存在sql注入的公网站点
  • 详细分析SQL state [99999]; error code [17059]; 无法转换为内部表示 解决方法(实战讲解)
  • DICOM基础:CT类型DICOM图像信息头分析
  • 手撕代码:C#.NET实现自定义IOC容器
  • 【C++】类和对象(九):再谈构造函数
  • python画图|errorbar初探
  • 鸿蒙NEXT开发笔记(九)仿微信聊天App的收发文本消息
  • 无人机救援系统基本组成
  • 选项卡设计与实现
  • Python酷库之旅-第三方库Pandas(183)
  • [数组基础] 0724. 寻找数组的中心下标
  • 机器学习算法之回归算法
  • Java中跳转结构
  • 实系数多项式的运算算法
  • <HarmonyOS第一课>HarmonyOS SDK开放能力简介的课后习题
  • 用示波器如何调方波?
  • 11-Python基础编程之错误和异常
  • HTML 事件
  • 深入理解 Java UUID 五个版本的区别及使用场景
  • PMP–知识卡片--项目经理领导风格