1. 函数指针
我们都知道c语言指针可以指向整形,浮点型,字符等等,但实际上指针也可以指向函数。
实际上当我们定义一个函数时,最终都会创建一个函数指针存储函数的地址。
那么函数指针怎么定义呢?函数指针的定义不同于其他变量的定义,其他变量的定义是这样的:
变量类型 变量名;
但c语言没有函数类型这一变量类型,因为函数类型太多了,你可以给一个函数传入整形,浮点,也可以返回字符,指针等等,
因此函数类型不是单一的。
因此要确定一个函数的类型需要确定他的形参数量和类型,返回参数的类型。
因此函数指针的定义是:
函数返回类型 (*指针名)(形参类型1,形参类型2);
注意这里(指针名)的括号不能去掉,否则的话就会变成 函数返回类型 *指针名(形参类型1,形参类型2); 这个的意思是定义一个返回类型为指针的函数
示例:
#include <stdio.h>
void fun1(){
printf("fun\n");
}
int main(){
//定义一个指向返回类型为void,无形参的函数的指针
void (*a)() = fun;
//调用函数
a();
return 0;
}
输出:
fun
通过函数指针我们就可以将一个函数1传给另一个函数2当做形参,如:
#include <stdio.h>
void fun(int i){
printf("fun%d\n",i);
}
void fun2(void (*a)(int),int i){
a(i);
}
int main(){
//定义一个指向返回类型为void,形参为int的函数的指针
void (*fun_pointer)(int) = fun;
//将函数指针作为参数传给fun2
fun2(fun_pointer,1);
return 0;
}
输出:
fun1
2. 函数数组
不止如此,c语言除了函数指针,还有函数数组,定义方式和函数指针也很相似,只需要加个[]即可:
函数返回类型 (*数组名[])(形参类型1,形参类型2);
示例:
#include <stdio.h>
void fun1(){
printf("fun1\n");
}
void fun2(){
printf("fun2\n");
}
//定义一个函数数组
void (*a[])() = {fun1,fun2};
int main(){
a[0]();
a[1]();
return 0;
}
输出:
fun1
fun2
标签:函数,形参,int,void,数组,类型,函数指针
From: https://blog.csdn.net/m0_53229076/article/details/140307074