函數指針數組的定義

函數指針數組的定義

函數指針數組的定義方法,有兩種:一種是標準的方法;一種是矇騙法。

第一種,標準方法:

{
分析:函數指針數組是一個其元素是函數指針的數組。那麼也就是說,此數據結構是是一個數組,且其元素是一個指向函數入口地址的指針。
根據分析:首先說明是一個數組:數組名[]
其次,要說明其元素的數據類型指針:*數組名[].
再 次,要明確這每一個數組元素是指向函數入口地址的指針:函數返回值類型 (*數組名[])().請注意,這裏爲什麼要把“*數組名[]”用括號擴起來呢?因爲圓括號和數組說明符的優先級是等同的,如果不用圓括號把指針數組說明 表達式擴起來,根據圓括號和方括號的結合方向,那麼 *數組名[]() 說明的是什麼呢?是元素返回值類型爲指針的函數數組。有這樣的函數數祖嗎?不知道。所以必須括起來,以保證數組的每一個元素是指針。

}

第二種,矇騙法:

儘管函數不是變量,但它在內存中仍有其物理地址,該地址能夠賦給指針變量。獲取函數方法是:用不帶有括號和參數的函數名得到。
函數名相當於一個指向其函數入口指針常量。 那麼既然函數名是一個指針常量,那麼就可以對其進行一些相應的處理,如強制類型轉換。
那麼我們就可以把這個地址放在一個整形指針數組中,然後作爲函數指針調用即可。


完整例子:
#include "stdio.h"
int add1(int a1,int b1);

int add2(int a2,int b2);

int main(int argc,char* argv[])

{

int numa1=1,numb1=2;

int numa2=2,numb2=3;

int (*op[2])(int a,int b);

op[0]=add1;

op[1]=add2;

printf("%d %d\n",op[0](numa1,numb1),op[1](numa2,numb2));

getch();

}

int add1(int a1,int b1)

{

return a1+b1;

}

int add2(int a2,int b2)

{

return a2+b2;

}


再給出常用的C變量的定義方式:
a) 一個整型數(An integer)
b) 一個指向整型數的指針(A pointer to an integer)
c) 一個指向指針的的指針,它指向的指針是指向一個整型數(A pointer to a pointer to an integer)
d) 一個有10個整型數的數組(An array of 10 integers)
e) 一個有10個指針的數組,該指針是指向一個整型數的(An array of 10 pointers to integers)
f) 一個指向有10個整型數數組的指針(A pointer to an array of 10 integers)
g) 一個指向函數的指針,該函數有一個整型參數並返回一個整型數(A pointer to a function that takes an integer as an argument and returns an integer)
h) 一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數並返回一個整型數( An array of ten pointers to functions that take an integer argument and return an

integer )

答案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer


發佈了1 篇原創文章 · 獲贊 26 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章