C語言:理解函式指標陣列和定義
阿新 • • 發佈:2018-12-16
-
函式指標陣列和定義
陣列是一個存放相同型別資料的儲存空間,那我們已經學習了指標陣列,比如:
int *arr[10];//陣列的每個元素是int*
那要把函式的地址存到一個數組中,那這個陣列就叫函式指標陣列,那函式指標的陣列如何定義呢?
int (*parr1[10])();
分析:parrl先和[]結合,說明parr1是陣列,陣列的內容是什麼呢?是int (*)() 型別的函式指標。
舉例:
# include <stdio.h> # include <stdlib.h> int Add(int x, int y) { return x + y; } int Sub(int x, int y) { return x - y; } int Mul(int x, int y) { return x * y; } int Div(int x, int y) { return x/y; } int main() { int(*p[4])(int, int) = { Add,Sub,Mul,Div}; int i = 0; for (i = 0; i < 4; i++) { printf("%d\n",p[i](8, 4)); } system("pause"); return 0; }
-
轉移表
一看到轉移這兩個字,就會想到和狀態有關,實際中通常是用 if-else語句或者switch語句進行一些狀態的切換,如果遇到比較複雜的情況,轉移次數可能會達到數百次或者數千次,如果再使用if-else語句或者switch語句,維護起這個軟體系統,工作量將會相當的大。這個時候就可以採用“轉移表”來避免這種情況。
舉例:計算器
# include <stdio.h> # include <stdlib.h> int Add(int x, int y) { return x + y; } int Sub(int x, int y) { return x - y; } int Mul(int x, int y) { return x * y; } int Div(int x, int y) { return x/y; } int main() { int a, b; int input = 1; int ret = 0; int(*p[5])(int a, int b) = {0,Add,Sub,Mul,Div};//函式指標陣列的使用 while (input) { printf("************************\n"); printf("*** 1:Add 2:Sub ***\n"); printf("*** 3:Mul 4:Div ***\n"); printf("************************\n"); printf("請選擇:"); scanf_s("%d", &input); if ((input<5 && input>0)) { printf("輸入運算元:>"); scanf_s("%d %d", &a,&b); ret = (*p[input])(a, b); } else { printf("輸入有誤\n"); } printf("ret=%d\n", ret); } system("pause"); return 0; }
-
指向函式指標陣列的指標
指向函式指標陣列的指標:指向函式指標陣列的指標是一個指標,指標指向一個數組,陣列的元素都是函式指標;
如何定義?
void test(const char* str) { printf("%s\n", str); } int main( ) { void (*pfun) (const char*) = test;//函式指標pfun void (*pfunArr[51)(const char* str); pfunArr[0] = test;//函式指標的陣列pfunArr void (*(*ppfunArr)[10])(const char*) = &pfunArr;return 0; //.指向函式指標陣列pfunArr的指標ppfunArr.