为了账号安全,请及时绑定邮箱和手机立即绑定

请问能不能利用for,while,if等语句甚至构造其他函数等方法 进行地址赋值

请问能不能利用for,while,if等语句甚至构造其他函数等方法 进行地址赋值

C
弑天下 2023-04-20 19:15:06
【问题1】指针数组可以存放函数的地址吗?【问题2】如果可以,数组指针类型是啥?是int *num[ ]还是chan *num[ ]还是其他类型?【问题3】如果可以,有木有简单方法解决下面问题有100个函数,HS1(),HS2(),HS3(),……,HS98(),HS99(),HS100()。还有1个指针数组num[100]来存放这100个函数的地址,要求将 HS1()的地址放到num(1)中, HS2()地址放到num(2)中, HS3()的地址放到num(3)中, 以此类推 直到 HS100()的地址放到num(100)当然一个挨着一个的地址赋值是可以的,但那样要100次才行,能不能利用for,while,if等语句甚至构造其他函数等方法 进行地址赋值?
查看完整描述

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

 


查看完整回答
反对 回复 2023-04-23
?
侃侃无极

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;

查看完整回答
反对 回复 2023-04-23
?
慕运维8079593

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;
}

 


查看完整回答
反对 回复 2023-04-23
  • 3 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信