码迷,mamicode.com
首页 > 其他好文 > 详细

理解函数指针

时间:2015-08-16 21:08:08      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:

1.直接调用函数

void fun(int x); //此处的声明也可写成:void fun( int );

int main(int argc, char* argv[])
{
    fun(10); //调用函数

    return 0;
}

/*定义*/
void fun(int x)
{
    printf(“%d\n”,x);
}

 

2.函数指针

void fun(int x); //也可写成:void fun( int );
void (*fp)( int ); //声明一个函数指针,也可声明成void(*fp)(int x),但一般不这样。

int main(int argc, char* argv[])
{
   fun(10); //直接调用
   fp=&fun; //将fun函数的地址赋给fp指针变量,如果上边没声明,可以直接void (*fp)(int) = &fun;
   (*fp)(20); //通过函数指针变量fp调用。
}

/*fun函数*/
void fun(int x) 
{
   printf(“%d\n”,x);
}

其实fun函数名是fun函数的头指针,区别是fun是指针常量,而fp是指针变量。和数组的头指针一样的意思。

所以也可以这样写:

void fun(int x); //也可写成:void fun( int );
void (*fp)( int ); //也可申明成void(*fp)(int x),但一般不这样。

int main(int argc, char* argv[])
{
   (*fun)(10); //直接调用,函数名的指针方式
   fp=fun; //不用加&,
   fp(20); //函数指针的函数名一样的方式
}

/*fun函数*/
void fun(int x) 
{
   printf(“%d\n”,x);
}

因为fun也是函数的头指针,所以(*fun)(10)方式也可以,因为这样写不方便,C语言设计者才设计成fun(10)的方式,所以指针变量fp(10)的方式也是OK的。

把函数地址赋值给fp时,加不加&都是一样的效果,都是把函数头地址赋值给fp。可通过gdb检测。我测试了。

注意:

在声明时:

void fun( int );    //不能写成void (*fun)( int )。
void (*fp)( int );   //不能写成void fp( int )。

理解函数指针

标签:

原文地址:http://www.cnblogs.com/leezhxing/p/4734926.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!