函数指针
- 2021 年 1 月 20 日
- 筆記
1,明确相关概念
a,指针函数:一个函数,只是返回值是一个指针,eg: int *add(int a ,int b)
b,函数名就是整个函数里面代码的首地址
int add(int a,int b)
{
printf(“%d\n”,a);
print(“%d\n”,b);
return a + b;
}
add 函数名就是整个函数add的首地址,就是三条语句的首地址,等于printf(“%d\n”,a);的首地址
2,函数指针概念:本质是一种程序员自己定义的数据类型(跟int,结构体数据类型一样),它保存着一个函数的地址
3,函数指针数据类型声明的语法:(不会分配内存,大型程序写于头文件)
语法: 返回值数据类型(*函数指针名)(形参表)
eg:int (*pfunc)(int a,int b);//pfunc就是一种数据类型,当成int类型来用
or eg:typedef int (*pfunc_t)(int a,int b);//对函数指针取别名pfunc_t(建议方法)
4,函数指针变量定义语法格式:函数指针名 函数指针变量;
eg:pfunc_t pfunc;//pfunc就是一个函数指针变量,将来保存函数地址
5,函数指针变量初始化
pfunc_t pfunc = add;//定义、初始化函数指针变量,指向add
6,通过函数指针变量来访问指向的函数,通过函数指针变量调用指向的函数
语法:函数指针变量名(实参表);
//实例:
#includ<stdio.h>
typedef (*pfunc_t)(int a,int b);
int add(int a,int b)//定义加法函数
{
return a + b;
}
int sub(int a,int b)//定义减法函数
{
return a -b;
}
void main(void)
{
int ret = 0;
pfunc_t pfunc = NULL;//定义函数指针变量且初始化为空
pfunc = add;//把add函数的地址保存于函数指针变量pfunc
ret = pfunc(100,200);调用add函数
printf(“a + b = %d\n”,ret);
func = sub;///把sub函数的地址保存于函数指针变量pfunc
ret = pfunc(100,200);//调用sub函数
printf(“a + b = %d\n”,ret);
}