指针-函数指针数组
什么是函數指針數組?
之前有說過指針數組,里邊存放的是一群相同類型的指針,函數指針數組是它的自己,那群指針指向的是參數和返回類型相同的函數。
如何表示函數指針數組?
了解這個之前,要先了解一些符號的優先級,*<[]<()。現在我們先回顧一下函數指針是怎么來的
int test (int a,int* b){}int *p1; //定義了一個整型指針變量p1 int (*p)(int ,int*);//定義了一個函數指針變量p//先找名字 p //p先和*結合表示是一個指針 //再和()結合表示該指針指向函數 //再和,int int*結合表示函數有兩個類型的參數 //再和int 結合表示函數返回值是int類型再來看看函數指針數組
int (*p[4])(int ,int*); //定義了一個數組,數組內應存放函數指針//先找名字,p //由于結合性的問題,p先和【】結合表示p是一個數組 //再和*結合表示存放的是指針 //再和()結合表示指針指向的是函數函數指針數組的用處
函數指針數組就是相當于一個轉移的作用,看一段加減乘除的代碼
#include<stdio.h> #include<stdlib.h>//打印菜單void menu(void) {system("cls");printf("*******************\n");printf("**1.sum 2.sub***\n");printf("**3.mul 4.div***\n");printf("*****0.eixt********\n");printf("*******************\n"); }int sum(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(void) {int (*parr[5])(int, int) = { 0,sum,sub,mul,Div };int input = 1;int x=0, y=0;do {menu();printf("%d\n", parr[input](x, y));printf("請輸入操作:\n");scanf_s("%d", &input);if (input >= 1 && input <= 4) {printf("請輸入兩個操作數:\n");scanf_s("%d%d", &x, &y);}else if (input == 0) {printf("游戲退出\n");break;}else {printf("選擇錯誤\n");}} while (input);return 0; }回調函數
回調函數,就是把函數的地址作為參數傳入一個函數
回調函數就是先將某個函數的地址傳入其中,然后再被傳入函數中看情況調用它
void refun(int (*pr)(int,int)); //函數指針類型作為參數的refun函數總結
- 上一篇: 指针-数组传参,指针传参
- 下一篇: 指针-指向函数指针数组的指针