zoukankan      html  css  js  c++  java
  • 指向函数的指针 linux中常见的函数指针应用及函数指针数组

    指向函数的指针定义规则是这样的:

    int (*p)(int,int);

    先定义这个函数指针的返回类型,然后在括号内定义这个指针的名称,在第二个括号内标记需要传入的参数的类型

    若传入的参数类型为float和double,那么就改为

    int (*p)(double,float);

    对于函数指针的初始化,只需要将函数的函数名赋给指针即可

    int (*p)(double,float);
    p=plus;//plus是一个函数的名字

    对于调用这个指针,只需要在把参数类型改成需要传入的变量名即可

    num3=(*p)(num1,num2);
    //或者 num3=p(num1,num2);去掉(*)即可

    下面添加一个实例

    int plus(int num1,int num2)
    {
        return num1+num2;
    }
    int minus(int num1,int num2)
    {
        return num1-num2;
    }
    int multiply(int num1,int num2)
    {
        return num1*num2;
    }
    int calculate(int (*p)(int,int),int num1,int num2)
    {
        return p(num1,num2);
    }
    int main(){
        int num1=8,num2=2;
        printf("%d
    ",calculate(plus, num1, num2));
        printf("%d
    ",calculate(multiply, num1, num2));
    }

    在calculate中定义了一个函数指针变量,每一次调用calculate函数时,传入一个需要调用的函数的函数名和参数。

    比如我们需要调用plus这个函数,就将plus的地址在calculate中传给p,p就变成了plus函数

    这里说白了其实是就在calculate中调用上面的plus函数,此时的p直接可以看成是plus(num1,num2)

    下面是函数指针的代码,在初始化的时候,其实和数组差不多,直接看实例也看得懂

    void fun1(int num)
    {
        printf("chice=%d
    ",num);
    }
    void fun2(int num)
    {
        printf("choice=%d
    ",num);
    }
    void fun3(int num)
    {
        printf("choice=%d
    ",num);
    }
    int main(){
        void (*p[3])(int)={fun1,fun2,fun3};
        for(int i=2;i>=0;i--)
            (*p[i])(i);
    }

    这里的(*p[i])(i)也可以改成p[i](i),两者是相同的

    p[1]代表指向fun1的函数指针

  • 相关阅读:
    SZU:B47 Big Integer II
    Plan : 破晓
    C程序设计语言(第二版)习题:第二章
    Linux : fedora 安装 vnc server
    Linux系统编程:客户端-服务器用FIFO进行通信
    Linux系统编程:dup2()重定向
    Vijos: P1046观光旅游
    FLOYD 求最小环
    uva 401.Palindromes
    codeforces Educational Codeforces Round 5 A. Comparing Two Long Integers
  • 原文地址:https://www.cnblogs.com/oldfish123/p/13204546.html
Copyright © 2011-2022 走看看