3 回答

TA貢獻1796條經驗 獲得超4個贊
#include <stdio.h>
typedef int U16;
typedef U16 (*func)();
U16 task1()
{
printf("task1\n");
return 0;
}
U16 task2()
{
printf("task2\n");
return 0;
}
U16 task3()
{
printf("task3\n");
return 0;
}
U16 task4()
{
printf("task4\n");
return 0;
}
U16 task5()
{
printf("task5\n");
return 0;
}
U16 IntSwi(func *p)//3:定義字程序U16 IntSwi();
{
int i;
for(i=0;i<5;i++,p++)
{
(*p)();
}
return 0;
}
int main()
{
func myfunc[5];//1:定義一個數組,該數組是一個指針數組,該指針指向一個函數;
func *p=myfunc; //再定義一個指向數組的指針
//2:給該指針數組元素賦值,指向對應函數(函數分別是U16 task1();到task5();)
myfunc[0]=task1;
myfunc[1]=task2;
myfunc[2]=task3;
myfunc[3]=task4;
myfunc[4]=task5;
IntSwi(p);
return 0;
}

TA貢獻1951條經驗 獲得超3個贊
/*下面的例子的判斷在DVEC++里編譯運行通過的*/
/*我隨便定義的函數來用*/
typedef unsigned short U16;
U16 task1(){};
。。。。。
U16 task5(){};
第一個:
/*A 定義一個數組,該數組是一個指針數組,該指針指向一個函數*/
/*函數原型為void fun() 參數列表自己改*/
void (*a[5/*大小這里改*/])(/*參數列表這里改*/);
/*B 再定義一個指向數組的指針*/
void (*(*b)[5/*大小這里改*/])(/*參數列表這里改*/); /*b=&a 這是正確的賦值*/
第二個:
a[0]=task1;
.....
a[4]=task5;
第三個:
靠,早點說這些定義的類型多處使用,那就應該typedef了
第一個改:
typedef void (*A[5/*大小這里改*/])(/*參數列表這里改*/);
typedef void (*(*B)[5/*大小這里改*/])(/*參數列表這里改*/);
第二個改:
A tasks;
tasks[0]=task1;
.....
tasks[4]=task5;
第三個改:
U16 IntSwi(B tasks)
{
B[0][0]();
B[0][1]();
B[0][2]();
B[0][3]();
B[0][4]();
/*如果編譯器聰明,B[0][5]()就會給出警告,例如VC++2002打開相關檢查就會提示這可能是緩沖溢出*/
}
- 3 回答
- 0 關注
- 396 瀏覽
添加回答
舉報