什么是函数指针,函数指针就是定义一个指针变量,它的值指向函数的入口地址。就可以用这个变量调用函数。
看一个链接 写的很详细。
用指针调用函数:
fun(int a){printf("%d\n", a);}
void main()
{
int (*p)(int); /*定义函数指针*/
p = fun; /*把fun的地址赋值给p*/
(*p)(1); /*用指针调用函数*/
}
在对函数指针赋值时 如p =fun; 不能在函数名后面加上(), 如: p = fun(); 会报woring 提示类型不对。因为p=fun()语句是把fun()函数的返回值赋值给p,fun()函数的返回值为int型,而 p为函数指针型。
使用typedef宏会更直观:
/*typedef 返回类型(*新类型)(参数表);*/
typedef int (*PFUN)(int); /*PFUN为指向一个函数指针类型,typedef 后的";"不要忘了*/
main()
{
PFUN p; /*定义*/
p = fun;
(*p)(2);
}
函数名和函数指针的关系:
还是前面的函数和变量看一下这几条语句能不能通过:
p(1) /*直接用函数指针变量代替函数名*/
(fun)(2) /*用函数名*/
可以通过;
而且 p = fun; 或 p= &fun; 都可以
那么 printf("%x, %x", fun, &fun);
会发现两个地址相同。
函数指针和函数名都是函数指针,函数名是个指针常量,而函数指针是个指针变量
参考 :
阅读(1256) | 评论(0) | 转发(0) |