美文网首页
C函数指针

C函数指针

作者: affyzh | 来源:发表于2020-03-12 11:23 被阅读0次

    函数指针

    函数指针是指向函数的指针变量。
    通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。
    函数指针可以像一般函数一样,用于调用函数、传递参数。
    函数指针变量的声明:

    typedef return_type (*fun_ptr_name)(param_type); 
    

    实例:

    #include <stdio.h>
     
    int max(int x, int y)
    {
        return x > y ? x : y;
    }
     
    int main(void)
    {
        /* p 是函数指针 */
        int (* p)(int, int) = & max; // &可以省略
        int a, b, c, d;
     
        printf("请输入三个数字:");
        scanf("%d %d %d", & a, & b, & c);
     
        /* 与直接调用函数等价,d = max(max(a, b), c) */
        d = p(p(a, b), c); 
     
        printf("最大的数字是: %d\n", d);
     
        return 0;
    }
    

    编译执行,输出结果如下:

    请输入三个数字:1 2 3
    最大的数字是: 3
    

    回调函数

    函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。

    #include <stdlib.h>  
    #include <stdio.h>
     
    // 回调函数
    void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
    {
        for (size_t i=0; i<arraySize; i++)
            array[i] = getNextValue();
    }
     
    // 获取随机值
    int getNextRandomValue(void)
    {
        return rand();
    }
     
    int main(void)
    {
        int myarray[10];
        populate_array(myarray, 10, getNextRandomValue);
        for(int i = 0; i < 10; i++) {
            printf("%d ", myarray[i]);
        }
        printf("\n");
        return 0;
    }
    

    编译执行,输出结果如下:

    16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709 
    

    相关文章

      网友评论

          本文标题:C函数指针

          本文链接:https://www.haomeiwen.com/subject/oqwyjhtx.html