Puntero a función
Un puntero a función es una variable puntero que apunta a una función.
Normalmente, cuando hablamos de variables puntero, nos referimos a variables que apuntan a un entero, un carácter, un arreglo, etc., mientras que un puntero a función apunta a una función.
Un puntero a función puede usarse como una función normal, para invocar funciones y pasar parámetros.
Declaración de un tipo de puntero a función:
typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型
Ejemplo
El siguiente ejemplo declara una variable puntero a función p, que apunta a la función max:
Ejemplo
Compile y ejecute, el resultado de salida es el siguiente:
请输入三个数字:1 2 3 最大的数字是: 3
Función de devolución de llamada
Puntero a función como parámetro de una función
Una variable puntero a función puede usarse como parámetro de una función; una función de devolución de llamada es una función que se invoca a través de un puntero a función.
En términos simples: una función de devolución de llamada es una función que tú implementas y que es invocada cuando se ejecuta la función de otra persona.
La siguiente es una explicación de Chang Xiling, autor de Zhihu:
Vas a una tienda a comprar algo, justamente lo que quieres no está en stock, entonces le dejas tu número de teléfono al empleado. Unos días después la tienda tiene el artículo, el empleado te llama, y cuando recibes la llamada vas a la tienda a recogerlo. En este ejemplo, tu número de teléfono se llama función de devolución de llamada; dejarle el teléfono al empleado se llama registrar la función de devolución de llamada; que la tienda tenga el artículo después se llama disparar el evento asociado a la devolución de llamada; que el empleado te llame se llama invocar la función de devolución de llamada; y que tú vayas a la tienda a recoger el artículo se llama responder al evento de devolución de llamada.
Ejemplo
En el ejemplopopulate_array()La función define tres parámetros, donde el tercer parámetro es un puntero a una función, y a través de esa función se establecen los valores del arreglo.
En el ejemplo definimos una función de devolución de llamadagetNextRandomValue(), que devuelve un valor aleatorio, y se pasa como puntero a función apopulate_array()la función.
populate_array()Se llamará10veces a la función de devolución de llamada, y el valor de retorno de la función de devolución de llamada se asignará al arreglo.
Ejemplo
Compile y ejecute, el resultado de salida es el siguiente:
16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709Otras extensiones