[C語言] function pointer的應用[四]: function pointer array

MuLong PuYang
4 min readFeb 10, 2019

--

指標函數本身可以寫成陣列的形式,如此可以讓陣列中每一個陣列都有相對應的指標函數,如此可以增加指標函數的的可用性

Function pointer 的宣告與 function pointer array的宣告方法

首先,我們先來比較 function pointer 的宣告方法與function pointer array的宣告方法

int (*func)(int, int) // 函數指標的宣告

以上是函數指標的宣告方法,同理的,其實我們只要替換(*func)的這個變數形式宣告法,轉換為陣列形式的宣告法,int (*func[4]) (int, int),我們就可以使用 function pointer array。

int (*func[4])(int, int) // 函數指標陣列的宣告

將同性質的函數指標,傳入陣列當中

這裡我採用我在function pointer的應用[二]: 傳進相同性質的function到function中這一篇中所使用的程式碼作為解說,以下是原始的程式碼

我們可以看到以下的程式碼中,有 add, minus, multiply 以及 divide 四個函數,我們現在改寫以下的程式碼,將這四個函數以函數指標的方式,放入函數指標陣列當中,再以呼叫陣列元素的方式,來呼叫函數指標。

#include <stdio.h>int add(int a, int b)
{
return a + b;
}
int minus(int a, int b)
{
return a - b;
}
int multiply(int a, int b)
{
return a * b;
}
int divide(int a, int b)
{
return a / b;
}
int operation(int a, int b, int (*operation)(int, int))
{
return operation(a, b);
}
int main(int argc, char* argv[])
{
int val;
// add
// val = add(4, 2);
val = operation(4, 2, add);
printf("val = %d\n", val);
// minus
// val = minus(4, 2);
val = operation(4, 2, minus);
printf("val = %d\n", val);
// multiply
// val = multiply(4, 2);
val = operation(4, 2, multiply);
printf("val = %d\n", val);
// divide
// val = divide(4, 2);
val = operation(4, 2, divide);
printf("val = %d\n", val);
return 0;
}

改寫後的程式碼

#include <stdio.h>int add(int a, int b)
{
return a + b;
}
int minus(int a, int b)
{
return a - b;
}
int multiply(int a, int b)
{
return a * b;
}
int divide(int a, int b)
{
return a / b;
}
int (*func_ptr_arr[4])(int, int);int main(int argc, char* argv[])
{
int val;
func_ptr_arr[0] = add; // 將add函數加到陣列第0個位置
func_ptr_arr[1] = minus; // 將minus函數加到陣列第1個位置
func_ptr_arr[2] = multiply; // 將multiply函數加到陣列第2個位置
func_ptr_arr[3] = divide; // 將divide函數加到陣列第3個位置
val = (*func_ptr_arr[0])(4, 2);
printf("val = %d\n", val);
val = (*func_ptr_arr[1])(4, 2);
printf("val = %d\n", val);
val = (*func_ptr_arr[2])(4, 2);
printf("val = %d\n", val);
val = (*func_ptr_arr[3])(4, 2);
printf("val = %d\n", val);
return 0;
}

程式結果

val = 6
val = 2
val = 8
val = 2

--

--