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

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

C/C++编程语言

编辑

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

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

实例

编辑

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

/* 例一:函式指標直接呼叫 */

# ifndef __cplusplus
    # include <stdio.h>
# else
    # include <cstdio>
# endif

int 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;
}


/* 例二:函式指標作為參數 */

struct object
{
    int data;
};

int object_compare(struct object * a,struct object * z)
{
    return a->data < z->data ? 1 : 0;
}

struct object *maximum(struct object * begin,struct object * end,int (* compare)(struct object *, struct object *))
{
    struct object * result = begin;
    while(begin != end)
    {
        if(compare(result, begin))
        {
            result = begin;
        }
        ++ begin;
    }
    return result;
}

int main(void)
{
    struct object data[8] = {{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}};
    struct object * max;
    max = maximum(data + 0, data + 8, & object_compare);
    return 0;
}

脚注

编辑
  1. ^ C++语言标准规定:A function designator is an expression that has function type. Except when it is the operand of the sizeof operator or the unary & operator, a function designator with type ‘‘function returning type’’ is converted to an expression that has type ‘‘pointer to function returning type’’.

相關條目

编辑

📚 Artikel Terkait di Wikipedia

TypeScript

TypeScript是由微軟进行開發和维护的一種开源的編程语言。TypeScript是JavaScript的严格語法超集,提供了可選的靜態型別检查。 TypeScript的知名開發者有C#的首席架构师兼Delphi和Turbo Pascal的创始人——安德斯·海尔斯伯格。 Type

函数对象

里,functor 就是 function object。 lambda对象,生成一个匿名的 closure object,其类型叫 closure type std::bind(...) 返回对象,更准确叫bind expression object。 std::function<R(Args...)>

邁爾斯-布里格斯類型指標

Function. The Myers & Briggs Foundation. [2023-04-12]. (原始内容存档于2023-05-30).  Storm, Susan. How Each Myers-Briggs® Type Uses Their Tertiary Function.

Visual C++名字修饰

function pointer type info> ::= <type modifier> <CV Modifier> <calling conv> [<storage ret>]<return type>[<parameter type>]∞1<throw type> 一般地,<type

F♯

single-argument functions there is syntactic sugar (pattern matching function): let rec factorial = function | 0 -> 1 | n -> n * factorial (n - 1) /// Using fold and

干扰素

Kurowska, Aleksandra K; Mendoza, Juan L; Schreiber, Gideon. Structure–function of type I and III interferons. Current Opinion in Immunology. 2024-02, 86 [2026-06-03]

Lua

unpack、值: function 键: math、值: table 键: ipairs、值: function 键: require、值: function 键: rawget、值: function 键: type、值: function 键: setmetatable、值: function 键: next、值:

動態HTML

org/1999/xhtml"> <head> <title>DHTML example</title> <script type="text/javascript"> function init() { myObj = document.getElementById("navigation"); //