3 回答
TA贡献1895条经验 获得超3个赞
#include "stdio.h"
void output(int x)
{
printf("%d\n",x);
}
void main()
{
void(*test[100])(int);//函数指针数组的定义,我试验的只能是固定大小的数组,动态数组不知道怎么弄
for (int i=0;i<100;i++)
{
test[i] = output;
(*test[i])(i);
}
}
这个程序的输出是100行数字从0~99
TA贡献2051条经验 获得超10个赞
1、数组里面可以存放函数地址,这就是传说中的函数指针数组。
2、数组指针就是一个指针里面存放数组的首地址的指针,int (* num)[ ]是这种类型。
3、定义
typedef int (* a)(参数类型列表);//重定义函数名
a num[100];
int i ;
for(i = 1;i<=100;i++)
num[i] = HSi;
TA贡献1876条经验 获得超5个赞
这种情况,HS1(),HS2(),~ HS100() 这些函数的参数类型和返回值最好是完全相同的,这样才能放到同一个数组中才能再次对其调用并使用。
举个例子,下面是省略简写的100个函数在for循环中分别被调用后输出内容和返回值的处理方法,实际使用中可以参照这种方式进行使用,真正一个一个赋值的方法应该是不会用到的。
#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 关注
- 144 浏览
添加回答
举报