深入了解函数指针与指针函数
来源:互联网 发布:淘宝开店成功率 编辑:程序博客网 时间:2024/06/05 16:02
一,概念
函数指针:指向函数的指针变量,本质上是一个指针变量,指向的是一个函数
指针函数:顾名思义就是带有指针的函数,即其本质是一个函数,只不过这种函数返回的是一个对应类型的地址,即返回的是一个指针。
二,定义
函数指针: 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;
}
- 深入了解函数指针与指针函数
- 初学C语言----指针深入了解 :指针与函数
- 指针+函数+数组 深入了解
- 深入理解 指针函数与函数指针
- 深入理解指针函数与函数指针
- 函数指针初步了解
- 指针函数与函数指针
- 指针函数与函数指针
- 函数指针与指针函数
- 指针函数与函数指针
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针 与 指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 仅限iE浏览器导出WORD
- 远程创建新项目后想把本地项目推送上去 git fatal: refusing to merge unrelated histories
- Swift基础 构造函数
- js作用域问题,undefined情况
- react-router 学习笔记之Link带参数传值
- 深入了解函数指针与指针函数
- ASP.NET 解决 请求被中止: 未能创建 SSL/TLS 安全通道。(.NET 4.0)
- servlet/filter/listener/interceptor区别与联系
- 2017.11.19C练习
- Mybatis异常There is no getter for property named 'XXX' in 'class java.lang.String' Mybatis版本:mybatis-
- EasyAr实现图片识别
- eclipse反编译
- jQuery+Ajax实现图片的预览和上传
- Spring Boot 在Controller使用@Transactional注解导致@RequestMapping失效