栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C/C++函数指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C/C++函数指针

C/C++函数指针 函数是否有地址

第一次听说函数指针的话肯定会有这样的疑问,函数是否有地址?其实是有的。

在内存中有一部分是专门用来存放代码的代码区,所谓函数就是由一些运行的语句组成的,函数的内存就属于这一区域。但是函数中用的变量并不在改区域,两者在地址上差距很大。

下面通过一段代码来演示:

#include 

using namespace std;

int add(int* a, int* b)
{
    //打印变量地址
    printf("a: %p, b: %pn", &a, &b);
    return *a + *b;
}


int main()
{
    int a = 1, b = 2;
    add(&a, &b);
    
    //打印函数地址,不要用cout<<&add,因为重载输出结果不是地址而是个布尔值
    printf("func address: %pn", &add);
    
    return 0;
}

函数指针 函数指针定义

我们仍以上文的add函数为例,定义一个名为fp指向add函数的指针

int (*fp)(int* a, int* b) = &add;

很显然,函数指针定义就是把函数声明中的函数名替换成了(*函数指针名)

函数指针调用

函数指针调用有两种形式,我们通过刚才写的fp来调用函数add,并传入两个参数——a和b的地址(其中a=1,b=2)

(*fp)(&a, &b);      //方式一,解引调用
fp(&a, &b);         //方式二,直接调用

有趣的是,这两种方式的存在是有历史原因的:

  • 贝尔实验室的C和Unix开发者采用第一种方式
  • 伯利克和Unix推广者采用第二种方式
  • 最后ANSI C兼容了两种方式
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1033243.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号