您的位置:首页 > 编程语言 > C语言/C++

C/C++ 函数指针

2016-04-21 12:27 381 查看

函数声明

例如:

float func(int, int);


以上就是一个函数的声明,要注意它的实际功能并没有被实现,换句话说就是它并没有被定义,只是声明此函数的存在。要想调用次函数,你必须对对此函数进行定义。例如,可以定义如下:

float func(int a, int b){
return (float)(a+b);
}


float func(int,int);
在计算机语言里被叫做表达式,此表达式说明
func(int,int)
返回的是一个
float
的数,
func
是函数地址(特别注意,他不是指针,而是函数在内存中的地址),它可以接受两个
int
型的数据作为传入参数。

函数指针

下面就是一个函数指针:

float (*pf)(int,int);


这里pf就是一个函数指针变量,他可以接受的参数是两个
int
,返回值为
float
。所以这个函数指针变量可以存放返回值为
float
,并且接受两个
int
为传入参数的函数地址。

我们可以做如下赋值运算:

pf = func;


调用func函数也就可以写成pf(…).

实验

实验代码如下:

#include <stdio.h>
#include <inttypes.h>
float func(int, int);
int main(int argc, char** argv){
float (*pf)(int, int);
pf = func;
printf("%f\n", pf(1, 2));
printf("%.16X\n", (uint64_t)(pf));
printf("%.16X\n", (uint64_t)(func));
printf("%.16X\n", (uint64_t)(&func));
printf("%.16X\n", (uint64_t)(&pf));
return 0;
}
float func(int a, int b){
return (float)(a + b);
}


其中一次执行结果如下:

3.000000
0000000025051005
0000000025051005
0000000025051005
000000004547FD08


注意输出结果的第二行,第三行以及第四行是相同的;最后一行与这三行是不同的。这说明:

bf
这个变量存放的内容是
func
的内容。

func
本身就是地址,所以取地址符号并没有对输出值产生影响。

bf
本身是个存放地址的变量,他自己也有地址,他的地址就是输出结果的最后一行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: