写Lab的时候遇到的问题+关于函数作为数组元素的写法
//全局变量数组(在不同函数中调用)
void* ftable[3];
//作为数组元素的函数number
void number(int a){
printf("Value of a is %d\n",a);
}
//初始化数组
void initalize(){
void(*num)(int) = & number;
ftable[0] = num;
}
//在main中使用数组内的函数
void main(){
initialize();
void (*arr) (int) = ftable[0];
(*(*arr))(1); // 输出 ("Value of a is 1")
}
下面是遇到E0109的解决过程
//函数作为参数和数组元素
void* fun[3]; //用于存放函数
void func(void(*f)(int)) {
for (int ctr = 0; ctr < 5; ctr++) {
(*f)(ctr);
}
}
void print(int x) {
printf("%d\n", x);
}
void main() {
void (*print1)(int) = &print;
(*print1)(1);
fun[0] = print1;
(*fun[0])(1); //此处报错E0109
}
类似的,在main函数中
void* a = fun[0];
void* b = print1;
(*a)(1);//E0109
(*b)(1);//E0109
可以在void func(void(*f)(int))中使用
func(fun[0]);
效果等于
func(print);
//尝试不同赋值方式
void* fun[3];
void (*p1)(int) = &print;
fun[0] = p1;
fun[1] = &print;
void* a = p1;
//(*a)(1) <- 无法使用 E0109
//下面三种效果相同
func(print);
func(fun[0]);
func(fun[1]);
//可以将fun[0]重新赋值给变量
void (*p1)(int) = fun[0];
(*(*p1))(1); //效果等同于(*print1)(1);