4.7.5 函數指針數組的指針
看着這個標題沒發狂吧?函數指針就夠一般初學者折騰了,函數指針數組就更加麻煩,現在的函數指針數組指針就更難理解了。
其實,沒這麼複雜。前面詳細討論過數組指針的問題,這裏的函數指針數組指針不就是一個指針嘛。只不過這個指針指向一個數組,這個數組裏面存的都是指向函數的指針。僅此而已。
下面就定義一個簡單的函數指針數組指針:
char * (*(*pf)[3])(char * p);
注意,這裏的pf 和上一節的pf 就完全是兩碼事了。上一節的pf 並非指針,而是一個數組名;這裏的pf 確實是實實在在的指針。這個指針指向一個包含了3 個元素的數組;這個數字裏面存的是指向函數的指針;這些指針指向一些返回值類型爲指向字符的指針、參數爲一個指向字符的指針的函數。這比上一節的函數指針數組更拗口。其實你不用管這麼多,明白這是一個指針就ok 了。其用法與前面講的數組指針沒有差別。下面列一個簡單的例子:
#include <stdio.h>
#include <string.h>
char * fun1(char * p)
{
printf("%s/n",p);
return p;
}
char * fun2(char * p)
{
printf("%s/n",p);
return p;
}
char * fun3(char * p)
{
printf("%s/n",p);
return p;
}
intmain()
{
char * (*a[3])(char * p);
char * (*(*pf)[3])(char * p);
pf = &a;
a[0] = fun1;
a[1] = &fun2;
a[2] = &fun3;
pf[0][0]("fun1");
pf[0][1]("fun2");
pf[0][2]("fun3");
return 0;
}