zoukankan      html  css  js  c++  java
  • C基础知识(6):指针--函数指针与回调涵数

    函数指针

    函数指针是指向函数的指针变量

    通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。

    函数指针可以像一般函数一样,用于调用函数、传递参数。

     1 #include <stdio.h>
     2 
     3 // 取两个数里最大的数字
     4 int getMaxValue(int, int);
     5 
     6 int main() {
     7     // func就是涵数指针
     8     int (*p)(int, int) = &getMaxValue; // &可省略
     9     int a = 15, b = 7, c = 20, d;
    10     d = p(c, p(a, b));
    11     printf("%d
    ", d); // 20
    12     return 0;
    13 }
    14 
    15 int getMaxValue(int x, int y) {
    16     return x >= y ? x : y;
    17 }

    回调涵数

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

    简单讲:回调函数是由别人的函数执行时调用你实现的函数。

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 // 回调函数
     5 void populateArray(int *arr, size_t size, int (*getNextValue)(void));
     6 // 获取随机值
     7 int getNextRandomValue();
     8 
     9 int main() {
    10     int arr[10], i;
    11     populateArray(arr, 10, getNextRandomValue);
    12     for (i = 0; i < 10; i++) {
    13         printf("%d ", arr[i]);
    14     }
    15     printf("
    ");
    16     return 0;
    17 }
    18 // size_t 是一种数据类型,近似于无符号整型,但容量范围一般大于 int 和 unsigned
    19 // int (*getNextValue)(void) = getNextRandomValue; (涵数指针)
    20 void populateArray(int *arr, size_t size, int (*getNextValue)(void)) {
    21     size_t i;
    22     for (i = 0; i < size; i++) {
    23         arr[i] = getNextValue();
    24     }
    25 }
    26 int getNextRandomValue() {
    27     return rand();
    28 }
  • 相关阅读:
    Scala(二)——基础语法(与Java的区分)和函数式编程
    LeetCode3.无重复字符的最大子串
    LeetCode2.两数相加
    LeetCode1.两数之和
    Scala(一)——基本类型
    图论算法总结(一)——图的遍历
    Hutool强大的工具类
    Jdk8新特性之接口新增方法
    mybatis的xml配置中if text判断
    Jdk8新特性目录
  • 原文地址:https://www.cnblogs.com/storml/p/7793531.html
Copyright © 2011-2022 走看看