• C语言:指针(函数回调)


    1.说实话:C语言的字符指针、数组指针、指针数组、数组传参和指针传参,多注意就可以搞定,实在不行C++也可以逃过去;但是函数指针,函数回调不行;尽管C++有仿函数可以逃过去,但是绝对跑不了,Linux也是如此;我从头开始学,学到C++最后,以及LInux也没跑了;还是得重新洗牌,重新来;望大家注意;

    2.函数指针

    1. #include
    2. void test(int,int)
    3. {
    4. printf("hehe\n");
    5. }
    6. int main()
    7. {
    8. printf("%p\n", test);
    9. printf("%p\n", &test);
    10. void (*pf) (intint)=&test;
    11. //返回类型; *pf是个指针; 参数
    12. return 0;
    13. }
    14. //函数名是函数的地址;
    15. //&函数名也是函数的地址;
    16. 如果我要把函数的地址存起来,那么应该怎样写

     2.1练习;

    1. //练习
    2. void test(char* pc,int arr[10])
    3. {}
    4. int main()
    5. {
    6. void (*pf)(char*, int [10]) = test;
    7. void (*pf)(char*, int []) = test;//不写10也可以
    8. void (*pf)(char*, int*) = test;//数组的本质是指针
    9. return 0;
    10. }

    2.2调用

    1. #include
    2. void test(int a,int b)
    3. {
    4. printf("hello Linux\n");
    5. }
    6. int test1(int a)
    7. {
    8. return a;
    9. }
    10. int main()
    11. {
    12. void (*pf)(int,int) = test;
    13. int (*pf1)(int) = test1;
    14. pf(1, 2);
    15. int m = pf1(2);
    16. int n = (*pf1)(2);//这两种都可以,加*一定要带括号;
    17. printf("%d\n",pf1(2));
    18. return 0;
    19. }

    2.3练习

    1. (*(void (*)())0)();
    2. //void (*)() ——指针类型
    3. //()0 强转
    4. //把0强转成该函数指针类型的指针,并调用0地址处的函数;
    5. //调用0地址处的函数;
    1. //signal是一个函数声明;
    2. //signal函数有2个参数,第一个参数类型是int,第二个参数类型是void(*)(int)函数指针类型
    3. //第二个函数指针指向的函数有一个int类型的参数,返回类型是void
    4. //signal 返回类型也是 void(*)(int)函数指针类型,函数指针指向的函数有一个int类型的参数,返回类型是void
    5. //signal返回的是一个函数指针;
    6. int main()
    7. {
    8. void (*signal(int, void(*)(int)))(int);
    9. //结合typedef的解释再变
    10. typedef void(*p)(int);
    11. p signal(int ,p); //但是非常不好理解;
    12. return 0;
    13. }

    2.4 typedef

    2.4.1重命名:这个很常见,将一个长的名字改成短的

    typedef int datatype ;

    2.4.2使用typedef 定义结构体

    1. tepedef struct
    2. {
    3. int id;
    4. }student;

    2.4.3使用typedef 定义指针类型

    1. typedef int (*p)[10] ; //定义数组类型;p是数组类型;
    2. typedef void(*pf)(int ,int); //定义函数指针类型 pf是函数指针类型名
    3. //本来是typedef void(*)(int ,int) pf; //把函数指针类型重定义为pf
    4. //这样写是错的,语法不允许,所以把pf放 * 后

    2.5那么函数回调,就是在此基础上,把函数当成变量参数,输入到另一个函数中调用,叫做函数回调;

  • 相关阅读:
    python开篇——初识python
    (附源码)计算机毕业设计SSM基于驾校管理系统
    Linux 文件权限
    MySQL(一)——MySQL的一些概念、数据库操作、数据表操作、数据操作
    【Unity】VS Code 没有自动补全 MonoBehaviour 的方法
    靶向 TGF-β 信号通路
    Google Earth Engine(GEE)——两种线性回归计算(单变量linefit和多变量linearRegression)
    【数据结构】链表超全整理~
    python版本高,使用虚拟环境降版本
    【JavaScript-30】js获取页面卷曲度
  • 原文地址:https://blog.csdn.net/qincjun/article/details/139510621