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

【问题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等语句甚至构造其他函数等方法 进行地址赋值?

弑天下
浏览 151回答 3
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&nbsp;

侃侃无极

1、数组里面可以存放函数地址,这就是传说中的函数指针数组。2、数组指针就是一个指针里面存放数组的首地址的指针,int (* num)[ ]是这种类型。3、定义typedef int (* a)(参数类型列表);//重定义函数名a num[100];&nbsp;int i ;for(i = 1;i<=100;i++)num[i] = HSi;

慕运维8079593

这种情况,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;}&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP