C语言指向函数的指针

指向函数的指针

  • 计算机也会给函数分配存储空间, 既然函数会分配内存空间,
  • 函数也有自己的地址, 所以指针变量也可以保存函数的地址
  • 指向函数的指针的定义
void (*p)();
p = &test;

void test(){
    printf("test\n");
}
  • 如果一个指针指向了函数, 那么访问方式也有多种方式
    • 函数名称();
    • (*指针变量名称)();
    • 指针变量名称();
test();
(*p)();
p();

指向函数的指针的案例

  • 需求: 要求一个函数既可以计算两个变量的和, 也可以计算两个变量的差
  • 指向函数的指针的一个应用场景
#include <stdio.h>
int sum(int num1, int num2);
int minus(int num1, int num2);
int test(int num1, int num2, int (*funP)(int, int));
int main()
{
    // 需求: 要求一个函数既可以计算两个变量的和, 也可以计算两个变量的差
    // 指向函数的指针的一个应用场景
    int res1 = sum(10, 20);
    printf("res1 = %i\n", res1);

    int res2 = minus(10, 20);
    printf("res2 = %i\n", res2);

    /*
    int (*funP)(int, int);
    funP = &sum;
    int res3 = funP(10, 20);
    printf("res3 = %i\n", res3);

    funP = &minus;
    int res4 = funP(10, 20);
    printf("res4 = %i\n", res4);
    */

    int res3 = test(10, 20, sum);
    printf("res3 = %i\n", res3);

    int res4 = test(10, 20, minus);
    printf("res4 = %i\n", res4);
    return 0;
}
int test(int num1, int num2, int (*funP)(int, int)){
    return funP(num1, num2);
}

int sum(int num1, int num2){
    return num1 + num2;
}
int minus(int num1, int num2){
    return num1 - num2;
}
  • 图示如下


  • 注意点:
  1. 指向函数的指针,作为函数的形参时, 指针变量的名称, 就是形参的名称
  2. 如果指向函数的指针作为函数的参数, 那么这个可以称之为回调函数
  3. 这里相当于, 给demo函数传入了一个sum函数或者minus函数
  4. 然后又在demo函数中调用了sum函数或者minus函数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,632评论 3 44
  • 第十章 指针 1. 地址指针的基本概念: 在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为...
    坚持到底v2阅读 1,176评论 2 3
  • 一天就这么的结束了,好像什么没有做什么事情,这一天天的过的可真快。定的早上要早起,但是早上的眼睛很难睁开,睁开后身...
    G先生_海林阅读 207评论 0 0
  • 小朋友:我有大汽车。 梁梁:我有枪。 小朋友:我家有好多玩具。 梁 梁:我家也有。 小朋友:我还有滑板车。 梁 梁...
    岁月留香99999阅读 223评论 0 0
  • 不可否认每当这个时候我都感觉到特别的无助。我呆呆的看着远方,却不知道在想着什么。 我觉得我的生活太遭了,彼此不是心...
    annaann阅读 225评论 0 1

友情链接更多精彩内容