指向函数的指针 linux中常见的函数指针应用及函数指针数组

Posted 小余的故事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指向函数的指针 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的函数指针

以上是关于指向函数的指针 linux中常见的函数指针应用及函数指针数组的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式开发中常见3个的C语言技巧

为啥指向成员函数的指针不像数据指针那样只是内存地址

C++|详解类成员指针:数据成员指针和成员函数指针及应用场合

linux c 常常混淆的概念

指针中容易混淆的概念以及常见笔试题

向函数中传递指针和传递指针的引用的区别