zoukankan      html  css  js  c++  java
  • uc os相关的C语言知识点1-函数指针

    开始读uc os的代码了,发现很多C语言的东西,之前没搞懂的,慢慢积累。

    就象某一数据变量的内存地址可以存储在相应的指针变量中一样,函数的首地址也以存储在某个函数指针变量里的。这样,我就可以通过这个函数指针变量来调用所指向的函数了。

      形式1:返回类型(*函数名)(参数表) ,例子如下:

    #include<stdio.h>
    void (*funp)(int);  //定义一个函数指针,注意函数的返回类型和参数类型和指针的一致,才可以用。
    void print(int n);  //函数申明
    
    int  main(void)
    {
      funp=print; //指针赋值
      (*funp)(10); //调用
    
    }
    
    void print(int n)
    {
        printf("%d
    ",n);
    }

    形式2:typedef  返回类型(*新类型)(参数表)

    不要以为typedef的只能这样用:typedef A B;

    #include<stdio.h>
    typedef void (*funp)(int); //这里不是定义一个具体的函数指针,是定义了一个新类型
    void print(int n);  //函数申明
    int  main(void)
    {
      funp p;
      p =print; //指针赋值
      (*p)(10); //调用
    
    }
    
    void print(int n)
    {
        printf("%d
    ",n);
    }

    形式3:把这个函数指针,作为参数,传入另一个函数

    #include<stdio.h>
    void pp1(int);
    void pp2(int);
    void pp3(int);
    typedef void (*funp)(int); //定义一个函数指针类型
    void callpp(funp p,int n); //这个函数的一个参数是函数指针
    
    void pp1(int n)
    {
        printf("pp1 print out %d
    ",n);
    }
    
    void pp2(int n)
    {
        printf("pp2 print out %d
    ",2*n);
    }
    
    void pp3(int n)
    {
        printf("pp3 print out %d
    ",3*n);
    }
    
    void callpp(funp p,int n)
    {
        p(n);  //这里就是函数的运行了
    }
    int main()
    {
        callpp(pp2,5);
        callpp(pp1,5);
        callpp(pp3,5);
    }
  • 相关阅读:
    【习题 3-12 UVA
    【习题 3-9 UVA
    【Codeforces Round #299 (Div. 2) E】Tavas and Pashmaks
    分布式ID生成器的解决方案总结
    Spring MVC表单防重复提交
    Spring import配置文件使用占位符
    什么是灰度发布,灰度测试。
    浅析负载均衡的6种算法,Ngnix的5种算法。
    神器,阿里巴巴Java代码检查插件
    去BAT面试完的Mysql面试题总结(55道,带完整答案)
  • 原文地址:https://www.cnblogs.com/nasduc/p/4741839.html
Copyright © 2011-2022 走看看