C语言函数指针的使用详解

 更新时间:2024年01月22日 08:28:43   作者:落叶@梧桐  
在C语言中,函数指针是指向函数的指针变量,本文主要介绍了C语言函数指针的使用详解,具有一定的参考价值,感兴趣的可以了解一下

在C语言中,函数指针是指向函数的指针变量。它可以存储函数的地址,使得可以通过该指针来调用函数。以下是函数指针的基本概念和用法:

一、基本概念:

声明函数指针:

returnType (*pointerName)(parameterTypes);

这里 returnType 是函数返回类型,parameterTypes 是函数参数类型。例如:

int (*add)(int, int); // 声明一个函数指针,指向接受两个int参数并返回int的函数。

初始化函数指针:

add = ∑ // sum是一个函数,将其地址赋给add指针。

或者更简洁的写法:

add = sum; // &可以省略

二、用法示例:

#include <stdio.h>

// 一个简单的函数
int sum(int a, int b) {
    return a + b;
}

int main() {
    // 定义一个函数指针并初始化
    int (*add)(int, int) = sum;

    // 使用函数指针调用函数
    int result = add(3, 4);

    // 打印结果
    printf("Result: %d\n", result);

    return 0;
}

在这个例子中,add 是一个指向接受两个整数参数并返回整数的函数的指针。它被初始化为指向 sum 函数。之后,通过 add(3, 4) 调用了 sum 函数,结果被打印出来。

三、函数指针的用途:

回调函数: 允许传递函数作为参数,常用于实现回调机制,即将函数作为参数传递给另一个函数,使得在某个事件发生时调用这个函数。

#include <stdio.h>

// 回调函数
void callbackFunction(int value) {
    printf("Callback: %d\n", value);
}

// 接受回调函数作为参数的函数
void performOperation(int x, int y, void (*callback)(int)) {
    int result = x + y;
    callback(result);
}

int main() {
    // 使用回调函数
    performOperation(3, 4, callbackFunction);

    return 0;
}

动态函数调用: 通过函数指针,可以在运行时动态地选择调用哪个函数,这样可以根据某些条件选择不同的实现。

#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int main() {
    int (*operation)(int, int);  // 声明一个函数指针

    // 根据条件选择函数
    int condition = 1;
    if (condition == 1) {
        operation = add;
    } else {
        operation = subtract;
    }

    // 使用函数指针调用函数
    int result = operation(5, 3);
    printf("Result: %d\n", result);

    return 0;
}
#include<stdio.h>

int add(int x,int y)
{
	return x+y;
 } 
 
int subtract(int x,int y)
{
	return x-y;
}

int multiply(int x,int y)
{
	return x*y;
}

//指针做函数参数
int prosecc(int(*p)(int,int),int a,int b)
{
	int P;
	P = (*p)(a,b);
	return P;
	
}

int main(void)
{
	int num;
	num = prosecc(add,3,4);
	printf("Results: %d\r\n",num);
	
	
	num = prosecc(subtract,4,3);
	printf("Results: %d\r\n",num);
	
	num = prosecc(multiply,4,3);
	printf("Results: %d\r\n",num);

    return 0;
}

函数指针数组: 可以创建存储函数指针的数组,实现类似分发器的功能,根据索引或条件选择调用不同的函数。

#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[])(int, int) = {add, subtract, multiply};  // 函数指针数组

    // 使用函数指针数组调用不同的函数
    int result1 = operations[0](5, 3);  // 调用add
    int result2 = operations[1](5, 3);  // 调用subtract
    int result3 = operations[2](5, 3);  // 调用multiply

    printf("Results: %d, %d, %d\n", result1, result2, result3);

    return 0;
}

函数指针作为结构成员: 可以将函数指针作为结构的一个成员,形成函数指针结构。

#include <stdio.h>

// 定义包含函数指针的结构
struct Operation {
    int (*operation)(int, int);
};

// 使用结构中的函数指针
int performOperation(struct Operation op, int a, int b) {
    return op.operation(a, b);
}

// 具体的函数实现
int add(int a, int b) {
    return a + b;
}

int main() {
    // 初始化结构并使用函数指针
    struct Operation addition = {add};
    int result = performOperation(addition, 3, 4);

    printf("Result: %d\n", result);

    return 0;
}

总的来说,函数指针是C语言中强大而灵活的特性,允许在运行时动态地选择调用哪个函数,从而提高代码的灵活性和可维护性。

到此这篇关于C语言函数指针的使用详解的文章就介绍到这了,更多相关C语言函数指针内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++内存泄漏检测和解决方法小结

    C++内存泄漏检测和解决方法小结

    内存泄露在编程中是常见的一种问题,一但程序发生内存泄露问题,将导致程序崩溃无法运行,内存泄漏是指程序在运行过程中,由于疏忽或错误导致已分配的内存空间无法被正确释放,本文给大家就介绍了C++中内存泄漏如何检测和解决,需要的朋友可以参考下
    2025-01-01
  • C语言实现BMP图像开运算处理

    C语言实现BMP图像开运算处理

    这篇文章主要为大家详细介绍了C语言实现BMP图像开运算处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C语言多线程服务器的实现实例

    C语言多线程服务器的实现实例

    这篇文章主要介绍了C语言多线程服务器的实现实例,文章用实例讲解的很清楚,有对这方面不太懂的同学可以参考下
    2021-02-02
  • C++实现学生信息管理系统(Map实现)

    C++实现学生信息管理系统(Map实现)

    这篇文章主要为大家详细介绍了C++实现学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Qt实现UDP多线程数据处理及发送的简单实例

    Qt实现UDP多线程数据处理及发送的简单实例

    本文主要介绍了Qt实现UDP多线程数据处理及发送的简单实例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C/C++ Qt 数据库QSql增删改查组件应用教程

    C/C++ Qt 数据库QSql增删改查组件应用教程

    Qt SQL模块是Qt中用来操作数据库的类,该类封装了各种SQL数据库接口,可以很方便的链接并使用。本文主要介绍了Qt数据库QSql增删改查组件的应用教程,感兴趣的同学可以学习一下
    2021-12-12
  • C语言查找数组里数字重复次数的方法

    C语言查找数组里数字重复次数的方法

    这篇文章主要介绍了C语言查找数组里数字重复次数的方法,涉及C语言针对数组的遍历与判断技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C语言中各类指针的用法(小结)

    C语言中各类指针的用法(小结)

    这篇文章主要介绍了C语言中各类指针的用法(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C语言程序环境中的预处理详解

    C语言程序环境中的预处理详解

    这篇文章主要为大家详细介绍了C语言程序环境中的预处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 用C语言实现2048游戏

    用C语言实现2048游戏

    这篇文章主要为大家详细介绍了用C语言实现2048游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07

最新评论