C语言 VS (E0109) 函数作为数组元素调用

写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);

参考文章:函数作为形参传入C语言,如何将函数作为参数传递给C?_MathxH Chen的博客-CSDN博客宣言采用函数参数的函数的原型如下所示:void func ( void (*f)(int) );这说明参数f将是一个指向一个函数的指针,该函数有一个void返回类型,并且它接受一个int参数。以下函数(print)是一个函数的示例,可以将其作为参数传递给func,因为它是正确的类型:void print ( int x ) {printf("%d\n", x);}函数调用当使用函数参数调用函数时,...https://blog.csdn.net/weixin_30181187/article/details/117157989?spm=1001.2014.3001.5502

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值