1. 程式人生 > >C語言的函式指標陣列

C語言的函式指標陣列

函式指標陣列

概念:
陣列元素是指標函式的陣列叫做指標函式陣列,通常我們也叫做轉移表
定義個初始化:
返回型別說明符 (*函式指標陣列名[])(引數列表) = {函式指標/函式名,…};
如下: int (*fun_array[])(int,int) = {add,del,mul,div};

函式指標陣列的使用如下:
函式指標陣列名下標或者(*函式指標陣列名)下標
下面是給出的示例程式碼:

#include<stdio.h>

int add(int a,int b); 
int sub(int a,int b);
int mul(int a,int b); int div(int a,int b); void make_menu(); int main(int argc,char* argv[]){ int (*fun_array [])(int,int) = {add,sub,mul,div}; int cmd = 0; int result = 0; int num1,num2; while(1){ make_menu(); printf("please select a num what you want :"); scanf("%d
"
,&cmd); if(cmd == 0){ break; }else{ printf("please input two num you want!\n"); scanf("%d %d",&num1,&num2); result = fun_array[cmd-1](num1,num2); printf("the form_1_result you want to calculate is:%d\n",result); int
(*fun_pointer)(int,int) = fun_array[cmd-1]; result = fun_pointer(num1,num2); printf("the form_2_result you want to calculate is:%d\n",result); result = (*fun_array[cmd-1])(num1,num2); printf("the form_3_result you want to calculate is:%d\n",result); } } return 0; } int add(int a,int b){ return a+b; } int sub(int a,int b){ return a - b; } int mul(int a,int b){ return a * b; } int div(int a,int b){ return a/b; } void make_menu(){ printf("=====================\n"); printf("1:add\n"); printf("2:sub\n"); printf("3:mul\n"); printf("4:div\n"); printf("0:quit\n"); printf("=====================\n"); }

由上面我們可以看出來函式指標陣列的三種呼叫方式:
int (*pointer)(int ,int ) = fun_array[i];
int result = pointer(num1,num2);
或者:
int result = fun_arrayi;
或者:
int result =*(fun_array[i])(num1,num2);
第三種形式我們是不經常會用到的,

結果:

1:add
2:sub
3:mul
4:div

0:quit

please select a num what you want :1
please input two num you want!
10 11
the form_1_result you want to calculate is:21
the form_2_result you want to calculate is:21
the form_3_result you want to calculate is:21

函式指標陣列的運用的注意點:

  1. 函式的返回型別一樣,並且函式的形參也是要一樣
  2. 通常是在swith函式中去做這樣的函式指標陣列,便於簡化程式碼

相關推薦

C語言函式指標陣列在ARM中斷中的應用

一、函式指標的宣告與初始化 ... int max_fun(int a, int b); /*函式指標的宣告,聲明瞭兩個形參都為int型別,返回值為int型別的函式指標*/ int (*fp)(i

c語言指標陣列陣列指標函式指標

#include <stdio.h> #include <stdlib.h> int func(int x){ return x; } int* func2(int x){ int *p=&x; return

C語言 函式指標 函式指標陣列的用法

前述:C語言的奧祕,博大精深,今天來回憶的分析函式指標,函式指標陣列的用法。具體請見下面一個註冊程式的實現。     1 #include <stdio.h> 2 #include &

C語言實現動態陣列 C語言函式指標和回撥函式

實現任意資料型別的動態陣列的初始化,插入,刪除(按值刪除;按位置刪除),銷燬功能。、 動態陣列結構體   實現動態陣列結構體的三個要素:(1)陣列首地址;(2)陣列的大小;(3)當前陣列元素的個數。 1 //動態陣列結構體 2 struct DynamicArray{ 3 void **a

C語言 函式指標呼叫時加星號與不加星號?

函式指標在賦值以後,例如通過庫動態載入方式,然後在使用時,程式呼叫遇到了既加星號,也有不加星號的方式,因此有點疑惑。 先上例項,再作分析 #include <stdio.h> void myfun(void); int main(void) { void (*pf)(void); p

c語言指標陣列陣列指標的認識

1.陣列:一批具有同名的同屬性的資料就組成了一個數組。(“[ ]”也是陣列型別的一部分)     由此可知:(1)陣列是一組有序資料的集合;(2)陣列中的每一個元素都屬於同一個資料型別。  定義一維陣列的一般形式:型別符  陣列名【常量表達式】(陣列也

C語言指標陣列的記憶體地址

char arr[3]; printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2); char *parr[3]; printf("parr:\n%d\n%d\n%d\n", parr, parr + 1, parr + 2);

C語言 函式指標 和 typedef

函式 函式一般遵循的格式:函式的返回型別、函式名、引數列表; void func(void) --> 對應的指標 void (*P)(void) typedef定義函式指標 typedef int (*funptr)(int,int) // typedef行 int (*

C語言 函式指標的例子

#include <stdio.h> typedef struct Foo { int a; int b; }Foo_t; struct Foo f; void *vp; int max(Foo_t *ef,int c) { return ((ef-

C語言函式指標實現多型特性

1、函式指標 函式指標是指向函式的指標變數,本質上是一個指標,類似於int*,只不過它是指向一個函式的入口地址。有了指向函式的指標變數後,就可以用該指標變數呼叫函式,就如同用指標變數引用其他型別變數一樣。 指標函式一般有兩個作用:呼叫函式和做函式的引數。 2、函式指標實現多

Android JNI程式設計(六)——C語言函式指標、Unition聯合體、列舉、Typedef別名、結構體、結構體指標

一:函式指標 1.函式指標顧名思義就是定義一個指標變數指向一個函式,和一級指標並沒有很大的區別我們看如下程式碼就很清楚的知道了 #include<stdio.h> #include<stdlib.h> //定義一個函式 in

C語言函式指標宣告

因為C語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是一個既著名又常用的方法。不過,右左法則其實並不是 C標準裡面的內容,它是從C標準的宣告規定中歸納出來的方法。C標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識一個宣告的,兩者可以說是相反的。右左法

C語言-函式指標

1 函式指標 函式原型: int sum(int a, int b); 函式指標: int (*psum)(int,int)=sum; 通過函式指標呼叫函式: int resul

C語言函式指標例子

函式指標 // ConsoleApplication2.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include "stdio.h" #pragma warning(disable:4996)

深入淺出剖析C語言函式指標與回撥函式(一)

關於靜態庫和動態庫的使用和製作方法。http://blog.csdn.net/morixinguan/article/details/52451612今天我們要搞明白的一個概念叫回調函式。什麼是回撥函式?百度的權威解釋如下:回撥函式就是一個通過函式指標呼叫的函式。如果你把函式

C語言-函式指標函式名的區別

記得大學時老師曾說函式的函式名是函式的入口的指標,之前看block通過clang編譯生成的C程式碼發現很多函式指標,於是想了解函式指標與函式名有什麼區別?以及函式指標一般都有些什麼作用。函式指標與函式名的區別首先先定義一函式以及一個指向蓋函式的函式指標,並分別對他們進行呼叫。

C語言/函式指標

#include<stdio.h> void function(){ printf("hello,world\n"); } int main(){ void (*p)() = function; p(); (*function)(); printf(

深入理解C語言函式指標

我們一開始只是從功能上或者說從數學意義上理解myFun這個函式,知道myFun函式名代表的是一個功能(或是說一段程式碼)。函式名到底又是什麼東西呢?函式指標變數     一個數據變數的記憶體地址可以儲存在相應的指標變數中,函式的首地址也以儲存在某個函式指標變數中。這樣,我就可以通過這個函式指標變數來呼叫所指向

C語言指標陣列陣列指標的區別

指標陣列是指:存放指標的陣列 陣列指標是指:指向一個數組的指標(是指標變數) 下面具體分析一下: (1)指標陣列:int *p[10]; 因為[ ]的優先順序高,所以[ ]先與p結合成為一個數組,然後這個陣列的型別為int*,也就是整形指標,該陣列含有10個指標型別的陣

c語言函式指標學習心得

顧名思義,指標函式即返回指標的函式。其一般定義形式如下: 型別名*函式名(函式引數表列); 其中,字尾運算子括號“()”表示這是一個函式,其字首運算子星號“*”表示此函式為指標型函式,其函式值為指標,即它帶回來的值的型別為指標,當呼叫這個函式後,將得到一個“指向返回值為