函数指针

✍ dations ◷ 2025-07-02 11:26:06 #计算机技术

函数指针是一种在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;}


相关

  • 河流湿地河流湿地(riverine wetland)是河流等流水水域沿岸、浅滩、缓流河湾等沼泽化过程而形成的湿地,包括河流、小溪、运河及沟渠等。拉姆萨尔公约把河流本身也包括在湿地范畴之内。全
  • 卢格杜努姆卢格杜努姆(拉丁语:Lugdunum)是一个高卢城市,即现今的法国里昂。卢格杜努姆于公元前43年由卢修斯·穆那特斯·普兰古斯(英语:Lucius Munatius Plancus)作为古罗马殖民地而建。公元
  • 分数N ⊆ Z ⊆ Q ⊆ R ⊆
  • 日本裔日裔中国人或在华日本人,是指具有日本血统,取得中国国籍的人。二次大战期间日本计划向满洲国与内蒙移民500万。在这十年中,生活在满洲国和日本占领的中国地区的日本国民由46000
  • 西方战线西方战线是形容整个一战或二战中位于德国以西、协约国(一战时期)或同盟国(二战时期)以东边境的军事争夺。这一种“武装边境争夺”的形式在整个战时被称为“战线”。在两次大
  • OSPF开放式最短路径优先(英语:Open Shortest Path First,缩写为 OSPF)是一种基于IP协议的路由协议。它是大中型网络上使用较为广泛的IGP协议。OSPF是对链路状态路由协议(英语:Link-sta
  • 2,4,5-三氯苯氧乙酸2,4,5-三氯苯氧乙酸,也称2,4,5-涕或2,4,5-T,可用作植物的生长调节剂、除草剂。纯品为白色无臭晶体,难溶于水,对人体有一定危害。根据不同植物施用适当计量,可以防止植物落花落果,
  • 赵汝适赵汝.mw-parser-output ruby>rt,.mw-parser-output ruby>rtc{font-feature-settings:"ruby"1}.mw-parser-output ruby.large{font-size:250%}.mw-parser-output ruby.larger
  • UTC+09:00UTC+09:00是一个时区,较世界协调时间快9小时。用于以下国家及地区:
  • 通德拉 (葡萄牙)通德拉(Tondela)是葡萄牙的一座城市。面积371.2平方公里。人口有31,026人。管辖有26个堂区。在行政区划上属于维塞乌区。