[C語言]function pointer的應用[一]: pass function to function

MuLong PuYang
4 min readJan 12, 2019

--

我們在寫程式的時候,會對一個程式傳入參數。參數的性質可以是一般的變數(pass by value)或者是指標(pass by reference)。那麼既然對於參數而言,可以是傳入參照形式的指標,那麼function pointer也是指標的一種,所以其實也可以用傳入參照的方式來將”函數”傳入函數中。

function pointer的宣告方法

首先我們先回想一下,function pointer的宣告形式為何

int (*func_ptr)(int) = func;

我們先別急著太快往下介紹,hold up, hold up。現在讓那我們會想一下,一般的變數宣告方式為何?

int a = 10;

在Function中的參數欄位宣告function pointer

我們把這兩種方式寫在一起,可以看到這兩種宣告方式的樣子

int (*func_ptr)(int) = func; // declare function pointer
int a = 10; // declare general variable

那麼我們現在回想一下,如果我們要宣告一個function,在參數欄位的寫法數如何宣告的

int func(int a, int b);

現在,我們在參數欄位宣告function pointer

int func(int a, int b, int (*func_ptr)(int));

將function傳入function的完整程式碼

以下我們實作一個完整的程式碼,我們先實作了一個函數func,這個函數接收了兩個參數,並回傳這兩個參數相加的值。

另外我們再宣告一個add_func的函數,這個函數接收了三個參數,a, b以及一個function pointer。

我們最後在主程式中,使用這樣的程式碼呼叫了add func的函數

int d = add_func(10, 20, func);

add_func中會使用傳進來的函數func,將其接收的兩個變數相加,並且回傳給函數中的變數c,最後在當回傳值。

#include <stdio.h>// 宣告一個函數func,這個函數用來相加接收到的兩個參數,並且回傳
int func(int a, int b) {
return a+b;
};
// 宣告一個函數add_func,這個函數接收兩個變數a與b,以及一個function
// pointer
int add_func(int a, int b, int (*func_ptr)(int, int)) {
int c;
c = func_ptr(a, b);
return c;
};
int main(int argc, char* argv[])
{
// add_func接收的三個參數分別為10, 20以及func。add_func會使用
// func這個函數,將10與20相加。而add_func會回傳這個結果
int d = add_func(10, 20, func);
printf("%d\n", d);return 0;
}

延伸閱讀

--

--