C语言:函数指针的使用

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

一、基本概念:

  1. 声明函数指针:

    returnType (*pointerName)(parameterTypes);

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

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

    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 函数,结果被打印出来。

三、函数指针的用途:

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

    #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;
    }
    

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

    #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;
    }
    

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

    #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;
    }
    

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

    #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语言中强大而灵活的特性,允许在运行时动态地选择调用哪个函数,从而提高代码的灵活性和可维护性。

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C语言函数指针使用可以通过以下几个步骤来完成: 1. 定义函数指针函数指针的定义格式为:返回值类型 (*指针名)(参数列表类型)。例如,int (*pf)(int, int)表示定义了一个返回值为int类型,参数为两个int类型的函数指针\[2\]。 2. 将函数地址赋给函数指针:可以使用函数名或者取地址运算符&来将函数的地址赋给函数指针。例如,int (*pf)(int, int) = &Add;表示将Add函数的地址赋给函数指针pf\[2\]。 3. 通过函数指针调用函数:可以使用函数指针来调用函数,使用的格式为(*指针名)(参数列表)。例如,int ret = (*pf)(3, 5);表示通过函数指针pf调用Add函数,并将返回值赋给ret变量\[3\]。 在给定的代码中,①语句应该完善为:p0 pt = &test;。这样就定义了一个函数指针pt,指向了test函数的地址\[1\]。 总结起来,函数指针使用包括定义函数指针、将函数地址赋给函数指针和通过函数指针调用函数这三个步骤。 #### 引用[.reference_title] - *1* [C语言函数指针用法](https://blog.csdn.net/studyingdda/article/details/126026990)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【C语言进阶】⑥函数指针详解](https://blog.csdn.net/m0_46569169/article/details/124318184)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值