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

指针函数与函数指针

时间:2015-10-15 01:11:35      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:

指针函数

是指带指针的函数,本质上是一个函数,函数的返回类型是某一类型的指针。

1 int    *fun(int a);

由于函数调用操作符()的优先于大于间接操作符*,首先执行的是函数调用操作,所以它是一个函数,只不过这个函数的返回值是一个地址值,函数的返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数的返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。

1 float    *fun();
2 float    *p;
3 p = fun(a);

 

 

函数指针

指向函数的指针变量,即本质是一个指针变量。最常见的两个用途是转换表(jump table)和作为参数传递给另一个函数。

1 int    (*fun)(int a);      //声明一个函数指针

简单的声明一个函数的指针,并不意味着马上就能使用它,和其他指针一样,对函数指针执行间接访问之前必须把他初始为指向某个函数。

1 int    f(int);
2 int    (*pf)(int ) = &f;

其中第二个声明创建了函数指针pf,并把它初始化为指向函数f,函数初始化可以通过一条简单的赋值语句来实现。

初始化表达式中的&操作符是可选的,因为函数名使用时总是由编译器把它转换为函数指针,&操作符,只是显示地说明了编译器将隐式执行的任务。

被初始化的函数指针,有三中方式对起进行调佣:

1 int    ans;
2 ans = f(25);
3 ans = (*pf)(25);
4 ans = pf(25);

第一条赋值语句是使用名字调用函数,执行的过程是,函数名f首先被转换为一个函数指针,该指针指向函数在内存中的位置,然后函数调用操作符调用该函数,执行开始于这个地址代码。

第二条语句是对pf执行间接访问操作,他把函数指针转换为一个函数名,这个转换并不是真正需要的,因为编译器在执行函数调用操作符之前又会把他转换过去,效果和第一条语句一样。

第三条语句是间接访问操作并非必需,因为编译器需要的是一个函数指针,当然效果和前面两个一样。

 

指针函数与函数指针

标签:

原文地址:http://www.cnblogs.com/running-ftd/p/4881083.html

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