函数指针

✍ dations ◷ 2025-11-30 01:33:32 #计算机技术

函数指针是一种在C、C++、D语言、其他类 C 语言和Fortran 2003中的指针。函数指针可以像一般函数一样,用于调用函数、传递参数。在如 C 这样的语言中,通过提供一个简单的选取、执行函数的方法,函数指针可以简化代码。

函数指针只能指向具有特定特征的函数。因而所有被同一指针运用的函数必须具有相同的参数和返回类型。

C语言标准规定,函数指示符(function designator,即函数名字)既不是左值,也不是右值。但C++语言标准规定函数指示符属于左值,因此函数指示符转换为函数指针的右值属于左值转换为右值。

除了作为sizeof或取地址&的操作数,函数指示符在表达式中自动转换为函数指针类型右值。因此通过一个函数指针调用所指的函数,不需要在函数指针前加取值或反引用(*)运算符。

以下为函数指针在C/C++中的运用

/* 例一:函式指標直接呼叫 */# ifndef __cplusplus    # include <stdio.h># else    # include <cstdio># endifint max(int x, int y){    return x > y ? x : y;}int main(void){    /* p 是函式指標 */    int (* p)(int, int) = & max; // &可以省略    int a, b, c, d;    printf("please input 3 numbers:");    scanf("%d %d %d", & a, & b, & c);    /* 與直接呼叫函式等價,d = max(max(a, b), c) */    d = p(p(a, b), c);     printf("the maxumum number is: %d\n", d);    return 0;}


相关

  • 曼彻斯特运河曼彻斯特运河(Manchester Ship Canal)是位于英国西北英格兰曼彻斯特的一个运河系统,连通曼彻斯特和爱尔兰海。曼彻斯特运河全长58公里,起点是梅西河。曼彻斯特运河的历史可以追
  • 蓝领蓝领(Blue-collar worker)是一个西方传来的生活型态定义。简单来说就是从事劳动工作的雇员,典型的代表可能是工厂作业员,蓝领经常被用来与白领比较,蓝领族的生活型态很明显的不是
  • 国子监街坐标:39°56′44″N 116°24′44″E / 39.94548229999999°N 116.4122963°E / 39.94548229999999; 116.4122963国子监街,旧称成贤街,是位于北京市东城区安定门内的一条街巷,因
  • 去灭绝去灭绝(de-extinction)又称复活生物学(resurrection biology)或生物复活(species revivalism),是让灭绝的生物复活的过程。包括重新生育出该种生物,或是制造出外观非常类似的个体。
  • 闽狮渔事件闽狮渔事件是台湾海峡两岸关系中的一个历史事件,发生于1991年7月21日。此事件起因于两岸渔民多次在海上发生冲突和纠纷,台湾方面认为中国大陆渔船越界捕鱼,而大陆方面则认为台
  • 斯芬克斯斯芬克斯(Sphinx)最初源于古埃及的神话,是长有翅膀的怪物,通常为雄性,当时的传说中有三种斯芬克斯——人面狮身的Androsphinx、羊头狮身的Criosphinx(阿曼的圣物)、鹰头狮身的Hiera
  • LoveLive!LoveLive! School idol project(日语:ラブライブ! School idol project)是由日本动画公司日昇动画、唱片公司Lantis、以及ACG月刊杂志《电击G's magazine》共同合作推出的读者
  • 兴义市兴义市是贵州省黔西南布依族苗族自治州州府所在地。位于贵州西南部,兴义古称“黄草坝”,历来是西南地区一个重要商贸中心,素有“黔桂锁钥”之称。南盘江横贯市境,境内地势西北高
  • 东帝汶议会国民议会(德顿语:Parlamentu Nasionál,葡萄牙语:Parlamento Nacional),东帝汶的国家立法机构,为一院制。国民议会成立于2001年,当时称作“制宪会议”,当时的东帝汶尚未获得独立地位;2
  • 南越第18师越南战争第18步兵师(越南语:Sư đoàn 18 Bộ binh)是隶属于越南共和国陆军(南越陆军)第3军区的一支师级步兵战斗单位,因为在越南战争末期最后一场大型战役——春禄战役中对越南