zoukankan      html  css  js  c++  java
  • 学点 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;
    }
    

  • 相关阅读:
    MySQL++:Liunx
    MySQL++:liunx 安装 MySQL
    MySQL++:MySQL 相关机制参数解释说明
    linux++:Linux
    linux++:基本操作命令
    coding++:java正则表达式获取指定HTML标签的指定属性值
    mongodb++:mongodb 基本语法
    xml模块
    shelve模块简单用法
    shutil模块
  • 原文地址:https://www.cnblogs.com/del/p/1347840.html
Copyright © 2011-2022 走看看