C/C++ 函数指针

函数声明

例如:

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

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

  1. bf这个变量存放的内容是func的内容。
  2. func本身就是地址,所以取地址符号并没有对输出值产生影响。
  3. bf本身是个存放地址的变量,他自己也有地址,他的地址就是输出结果的最后一行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值