第一種,標(biāo)準(zhǔn)方法:
{
分析:函數(shù)指針數(shù)組是一個其元素是函數(shù)指針的數(shù)組。那么也就是說,此數(shù)據(jù)結(jié)構(gòu)是是一個數(shù)組,且其元素是一個指向函數(shù)入口地址的指針。
根據(jù)分析:首先說明是一個數(shù)組:數(shù)組名[]
其次,要說明其元素的數(shù)據(jù)類型指針:*數(shù)組名[].
再 次,要明確這每一個數(shù)組元素是指向函數(shù)入口地址的指針:函數(shù)返回值類型 (*數(shù)組名[])().請注意,這里為什么要把“*數(shù)組名[]”用括號擴起來呢?因為圓括號和數(shù)組說明符的優(yōu)先級是等同的,如果不用圓括號把指針數(shù)組說明表達式擴起來,根據(jù)圓括號和方括號的結(jié)合方向,那么 *數(shù)組名[]() 說明的是什么呢?是元素返回值類型為指針的函數(shù)數(shù)組。有這樣的函數(shù)數(shù)祖嗎?不知道。所以必須括起來,以保證數(shù)組的每一個元素是指針。
}
第二種,蒙騙法:
盡管函數(shù)不是變量,但它在內(nèi)存中仍有其物理地址,該地址能夠賦給指針變量。獲取函數(shù)方法是:用不帶有括號和參數(shù)的函數(shù)名得到。
函數(shù)名相當(dāng)于一個指向其函數(shù)入口指針常量。 那么既然函數(shù)名是一個指針常量,那么就可以對其進行一些相應(yīng)的處理,如強制類型轉(zhuǎn)換。
那么我們就可以把這個地址放在一個整形指針數(shù)組中,然后作為函數(shù)指針調(diào)用即可。
完整例子:
#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) 一個整型數(shù)(An integer)
b) 一個指向整型數(shù)的指針(A pointer to an integer)
c) 一個指向指針的的指針,它指向的指針是指向一個整型數(shù)(A pointer to a pointer to an integer)
d) 一個有10個整型數(shù)的數(shù)組(An array of 10 integers)
e) 一個有10個指針的數(shù)組,該指針是指向一個整型數(shù)的(An array of 10 pointers to integers)
f) 一個指向有10個整型數(shù)數(shù)組的指針(A pointer to an array of 10 integers)
g) 一個指向函數(shù)的指針,該函數(shù)有一個整型參數(shù)并返回一個整型數(shù)(A pointer to a function that takes an integer as an argument and returns an integer)
h) 一個有10個指針的數(shù)組,該指針指向一個函數(shù),該函數(shù)有一個整型參數(shù)并返回一個整型數(shù)( 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
聯(lián)系客服