函數指針數組的定義


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

第一種,標准方法:

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

}

第二種,蒙騙法:

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


完整例子:
#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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM