函式指標

指標也可用於指向功能。

我們來看一個基本功能:

int my_function(int a, int b)
{
    return 2 * a + 3 * b;
}

現在,讓我們定義該函式型別的指標:

int (*my_pointer)(int, int);

要建立一個,只需使用此模板:

return_type_of_func (*my_func_pointer)(type_arg1, type_arg2, ...)

然後我們必須將此指標指定給函式:

my_pointer = &my_function;

此指標現在可用於呼叫該函式:

/* Calling the pointed function */
int result = (*my_pointer)(4, 2);

...

/* Using the function pointer as an argument to another function */
void another_function(int (*another_pointer)(int, int))
{
    int a = 4;
    int b = 2;
    int result = (*another_pointer)(a, b);

    printf("%d
", result);
}

儘管這種語法看起來更自然且與基本型別一致,但是歸因和解除引用函式指標不需要使用 &*運算子。因此,以下程式碼段同樣有效:

/* Attribution without the & operator */
my_pointer = my_function;

/* Dereferencing without the * operator */
int result = my_pointer(4, 2);

為了提高函式指標的可讀性,可以使用 typedef。

typedef void (*Callback)(int a);

void some_function(Callback callback)
{
    int a = 4;
    callback(a);
}

另一個可讀性技巧是 C 標準允許人們將上述引數中的函式指標(但不是在變數宣告中)簡化為看起來像函式原型的東西; 因此,以下內容可以等效地用於函式定義和宣告:

void some_function(void `callback(int)`)
{
    int a = 4;
    callback(a);
}

也可以看看

功能指標