3 回答

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個贊
#include "stdio.h"
void output(int x)
{
printf("%d\n",x);
}
void main()
{
void(*test[100])(int);//函數(shù)指針數(shù)組的定義,我試驗(yàn)的只能是固定大小的數(shù)組,動態(tài)數(shù)組不知道怎么弄
for (int i=0;i<100;i++)
{
test[i] = output;
(*test[i])(i);
}
}
這個程序的輸出是100行數(shù)字從0~99

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個贊
1、數(shù)組里面可以存放函數(shù)地址,這就是傳說中的函數(shù)指針數(shù)組。
2、數(shù)組指針就是一個指針里面存放數(shù)組的首地址的指針,int (* num)[ ]是這種類型。
3、定義
typedef int (* a)(參數(shù)類型列表);//重定義函數(shù)名
a num[100];
int i ;
for(i = 1;i<=100;i++)
num[i] = HSi;

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個贊
這種情況,HS1(),HS2(),~ HS100() 這些函數(shù)的參數(shù)類型和返回值最好是完全相同的,這樣才能放到同一個數(shù)組中才能再次對其調(diào)用并使用。
舉個例子,下面是省略簡寫的100個函數(shù)在for循環(huán)中分別被調(diào)用后輸出內(nèi)容和返回值的處理方法,實(shí)際使用中可以參照這種方式進(jìn)行使用,真正一個一個賦值的方法應(yīng)該是不會用到的。
#include "stdio.h"
unsigned char HS1(unsigned char ucArg);
unsigned char HS2(unsigned char ucArg);
/* ………… */
unsigned char HS99(unsigned char ucArg);
unsigned char HS100(unsigned char ucArg);
unsigned char (*const wucFunctionPointer_tbl[])( unsigned char ) = {
HS1,
HS2,
/* ………… */
HS99,
HS100
};
void main(void)
{
unsigned char aucLoopCnt = 0;
unsigned char aucFuncReturn = 0;
for (aucLoopCnt = 0; aucLoopCnt < (sizeof(wucFunctionPointer_tbl)/sizeof(void*)); aucLoopCnt++)
{
aucFuncReturn = wucFunctionPointer_tbl[aucLoopCnt](aucLoopCnt);
printf("Function Return is %d\n", aucFuncReturn);
}
}
unsigned char HS1(unsigned char ucArg)
{
printf("This is HS1 Running: Arg is %d\n", ucArg);
return ucArg;
}
unsigned char HS2(unsigned char ucArg)
{
printf("This is HS2 Running: Arg is %d\n", ucArg);
return ucArg;
}
/* ………… */
unsigned char HS99(unsigned char ucArg)
{
printf("This is HS99 Running: Arg is %d\n", ucArg);
return ucArg;
}
unsigned char HS100(unsigned char ucArg)
{
printf("This is HS100 Running: Arg is %d\n", ucArg);
return ucArg;
}
- 3 回答
- 0 關(guān)注
- 182 瀏覽
添加回答
舉報