一. 函数指针的声明方式
1. 直接声明
int (*add)(int a, int b);
2. 先声明一个指针,后再把函数赋值给它
int add(int a, int b);
int (*p)(int, int);
p=add;
3. 调用
p(1,2);
(*p)(1,2);
二. 函数指针的数组
1. *p[n] 和 (*p)[n]的区别
*p[3]表示一个指向3个指针的数组。
(*p)[3] 表示指向一个包含3个元素的数组的指针。
2. 声明
void (*p2[2])(int a, int b);
数组名为p2,数组大小为2,数组中元素类型为void (*)(int a, int b),表明元素是一个指向某个函数的指针,指针指向的类型为void () (int a,int b)。
3. 赋值
p2[1] = add;
4. 调用
p2[1](2,3);
(*p2[1])(3,4);
三. 使用typedef
#include <stdio.h>
int inc(int a)
{
return(++a);
}
int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedef int(FUNC1)(int);
typedef int(FUNC2)(int*,int*,int*);
void show(FUNC2 fun,int arg1, int*arg2)
{
FUNC1 *p = &inc;
int temp =p(arg1);
fun(&temp,&arg1, arg2);
printf( "%d\n ",*arg2);
}
main()
{
int a;
show(multi,10,&a);
getchar();
return 0;
}