深入了解函数指针与指针函数

  一,概念

函数指针:指向函数的指针变量,本质上是一个指针变量,指向的是一个函数

指针函数:顾名思义就是带有指针的函数,即其本质是一个函数,只不过这种函数返回的是一个对应类型的地址,即返回的是一个指针。

二,定义

 函数指针: type (*func)(type , type ),如 void (*func)(void),定义一个指向void类型的指针变量。

 指针函数: type  *func (type , type),如 int *func(void),定义一个返回int型的指针函数。

三,代码演示

1,指针函数

#include <stdio.h>  
  
int*fun(int *a)  
{  
    return a;  
}  
int main(int argc, char **argv)  
{  
    int a = 3;  
    printf("%d", *(fun(&a)));  
    return 0;  
} 

 

2,函数指针

 

①最简单的一种函数指针形式:

#include <stdio.h>  
typedef int (*Func)(int);   //声明指针  
Func func;
int fun(int i)  
{  
    return i + 1;  
}  
int main(int argc, char **argv)  
{  
    int r;  
    func = fun;     //给指针赋值  
    r = (*func)(5);     //调用  
    printf("%d\n", r);  
    return 0;  
}  

typedef的功能是定义新的类型,第2句就是定义了一种Func的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回int类型。后面就可以像使用int,char一样使用Func了。

 

②函数指针数组的应用:

#include "stdio.h"

double app_add(double a,double b) 
{
   return a+b;
}
double app_sub(double a,double b)
{
  return a-b;
}
/*函数指针数组申明*/
double (*app_func[])(double, double) = {  
    app_add,app_sub
};  

int main(int argc, const char * argv[])  
{  
  
    int oper = 0;  
    int op1 = 5;  
    int op2 = 8;  
    int result = app_func[oper](op1,op2);  //oper=0调用app_add函数;oper=1调用app_sub函数。
    printf("%d",result);  
    return 0;  
}  
  

③函数指针结构体与数组的应用:

typedef void (*App_Func)(void);


typedef struct {
App_Func  app_func1;  
App_Func  app_func2;
} tApp_t;



enum {
MODE_IDLE = 0,
MODE_INIT,
MODE_MAX
};
const tApp_t Tab[MODE_MAX]=

{

/*IDLE*/

{

app_idle_fun1,

app_idle_fun2

},



/*INIT*/

{

app_init_fun1,

app_init_fun2

},

};

void app_idle_fun1()

{

}



void app_idle_fun2()

{

}

void app_init_fun1()

{

}

void app_init_fun2()

{

}

int main (void)

{

    Tab[MODE_IDLE ].app_idle_fun1(); //调用app_idle_fun1函数

return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱的远日点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值