1.函数指针定义
函数类型 (*指针变量名)(形参列表);
“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。
例如:
int (*f)(int x);
double (*ptr)(double x);
在定义函数指针时请注意:
函数指针和它指向的函数的参数个数和类型都应该是—致的;
函数指针的类型和函数的返回值类型也必须是一致的。
2.函数指针的赋值
函数名和数组名一样代表了函数代码的首地址,因此在赋值时,直接将函数指针指向函数名就行了。
例如,
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
把函数的地址赋值给函数指针,可以采用下面两种形式:
f=&func; /* 将func函数的首地址赋给指针f */
f=func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
第二种格式看上去和函数调用无异。但是有些程序员倾向于使用第一种格式,因为它明确指出是通过指针而非函数名来调用函数的。
3、下面给出一个示例程序:
#include<stdio.h>
void(*fp)();//函数指针: 指向函数的指针包含了函数的地址,可以通过它来调用函数
void(*fp_para)(char*);//带参数的函数指针
voidfunc_para(char*s);
voidfunc();
intmain(void)
{
fp_para=&func_para;//或者:fp_para=func_para;
(*fp_para)("This is the parameter of the funtion!");
fp=&func;//或者:fp=&func;
(*fp)();
return0;
}
voidfunc_para(char*s)
{
printf("%s\n",s);
}
voidfunc()
{
printf("This function has no parameter!\n");
}