• 学点 C 语言(38): 函数 函数指针



    先复习函数的定义与函数的声明:
    //这是一个求和函数的定义:
    int add(int x, int y)
    {
        return(x + y);
    }
    
    //可以这样声明:
    int add(int x, int y);
    
    //也可以这样声明:
    int add(int, int);
    

    定义一个函数指针声明一个函数差不多, 用 (* ) 包括函数即可:
    //像这样:
    int (*pfun)(int, int);
    
    //或这样:
    int (*pfun)(int x, int y);
    
    //也可以:
    typedef int (*pfun)(int, int);
    
    //这就声明了一个叫 pfun 的函数指针, 能被它指向的函数一定要有相同的参数格式.
    

    1. 简单例子:
    #include <stdio.h>
    
    int add(int x, int y) {return(x + y);}
    int sub(int x, int y) {return(x - y);}
    int mul(int x, int y) {return(x * y);}
    int div(int x, int y) {return(x / y);}
    
    int main(void)
    {
        int (*pf)(int, int);
    
        pf = add;
        printf("%d\n", pf(9, 3)); /* 12 */
        
        pf = sub;
        printf("%d\n", pf(9, 3)); /* 6  */
        
        pf = mul;
        printf("%d\n", pf(9, 3)); /* 27 */
        
        pf = div;
        printf("%d\n", pf(9, 3)); /* 3  */
        
        getchar();
        return 0;
    }
    

    2. 函数指针数组:
    #include <stdio.h>
    
    int add(int x, int y) {return(x + y);}
    int sub(int x, int y) {return(x - y);}
    int mul(int x, int y) {return(x * y);}
    int div(int x, int y) {return(x / y);}
    
    int main(void)
    {
        int (*pf[4])(int, int) = {add, sub, mul, div};
    
        printf("%d\n", pf[0](9, 3)); /* 12 */
        printf("%d\n", pf[1](9, 3)); /* 6  */
        printf("%d\n", pf[2](9, 3)); /* 27 */
        printf("%d\n", pf[3](9, 3)); /* 3  */
        
        getchar();
        return 0;
    }
    

    3. 用函数指针做参数:
    #include <stdio.h>
    
    int add(int x, int y) {return(x + y);}
    int sub(int x, int y) {return(x - y);}
    int mul(int x, int y) {return(x * y);}
    int div(int x, int y) {return(x / y);}
    
    int math(int(*pfun)(int, int), int x, int y) {
        return pfun(x, y);
    }
    
    int main(void)
    {
        printf("%d\n", math(add, 9, 3)); /* 12 */
        printf("%d\n", math(sub, 9, 3)); /* 6  */
        printf("%d\n", math(mul, 9, 3)); /* 27 */
        printf("%d\n", math(div, 9, 3)); /* 3  */
        
        getchar();
        return 0;
    }
    

  • 相关阅读:
    Git 命令使用小笔记
    一个关于if else容易迷惑的问题
    浏览器与Node环境下的Event Loop
    镜面反射
    Socket通信原理
    Git
    vba工具
    为什么要用prototype
    Oracle 列转换为行, 逗号拼接.
    JS中的phototype
  • 原文地址:https://www.cnblogs.com/del/p/1347840.html
Copyright © 2020-2023  润新知