1. 函数指针
函数名就是一个地址,所以函数名就能放在指针中
定义指针的方法:
void (*p)() = Func;
调用函数指针的方法:
(*p)(); 或者 p();
和数组的道理一样
有参数和有返回值的调用函数指针:
int (*padd)(int a,int b) = add;
printf("%d\n",padd(100,200));
或者 printf("%d\n",(*padd)(100,200));
体会函数指针的用法:
#include <stdio.h>
void Func(){
printf("Hello World\n");
}
int add(int a,int b){
return a+b;
}
int main(){
Func();
printf("%p\n",Func);
printf("%p\n",&Func);
void (*p)() = Func; //p就是函数指针
(*p)();
p();
// ()运算符 ==> Func() p()
int arr[3];
int* parr = arr;
// []运算符 ==> arr[i] parr[i]
int (*padd)(int a,int b) = add;
printf("%d\n",padd(100,200));
printf("%d\n",(*padd)(100,200));
}
结果为:
Hello World
0x4005d6
0x4005d6
Hello World
Hello World
300
300
对于函数指针,可以理解为 int (*padd)(int a,int b) ===> int add(int a,int b)
2. 函数指针传入函数和函数指针组成指针数组
使用函数指针传入函数,多个函数指针组成指针数组,做加减乘除运算:
#include <stdio.h>
int add(int a,int b){
return a+b;
}
int sub(int a,int b){
return a-b;
}
int mul(int a,int b){
return a*b;
}
int div(int a,int b){
return a/b;
}
int cal(int (*padd)(int,int),int a,int b){
return padd(a,b);
}
int main(){
int