Uso de punteros de función

Un puntero de función, como su nombre lo indica, es un puntero, al ser un puntero, esta variable se utiliza para almacenar la dirección y tiene la función de acceder al contenido de la dirección.

El formato de nomenclatura es: tipo de valor de retorno de función (* nombre de puntero) (tipo de parámetro de función)
como int (* p) (int, int), double (* fun) (double, double)

Podemos aprender acerca de los punteros de función a través de un ejemplo clásico:
diseñar un proceso de función, implementar diferentes funciones cada vez que se llame y encontrar la suma y la diferencia de dos números y el valor mayor de los dos números.

Análisis: Podemos usar el puntero de función como parámetro en la función de proceso para pasar la dirección de entrada de diferentes funciones y obtener diferentes resultados.

En primer lugar, necesitamos escribir la implementación del código específico de las tres funciones, a saber, suma, diferencia y comparación para obtener un valor mayor.
Se define de la siguiente manera:

int maxi(int& a, int& b) {
    
    
	return a > b ? a : b;
}
int mini(int& a, int& b) {
    
    
	return a > b ? b : a;
}
int sum(int& a, int& b) {
    
    
	return a + b;
}

Necesito entender si el nombre de la función es la dirección de la función
Dirección de función
, podemos definir un puntero a estas tres funciones:

	int(*fun)(int&,int&) = maxi;//fun指针存放的是 maxi 函数的地址

La definición de la función de proceso se vuelve muy simple: solo necesita implementar un puntero internamente y usar este puntero para llamar a otras funciones para completar la transferencia de valor. Se define de la siguiente manera:

int process(int& val1, int& val2,int(*fun)(int&, int&)) {
    
    
	return (*fun)(val1, val2);//
}

'*' más 'variable de puntero' indica el contenido de la dirección almacenada en la variable de puntero , en resumen, la dirección de cuya
variable de puntero p está almacenada, entonces * p es quién.

Código completo:

int process(int& val1, int& val2,int(*fun)(int&, int&)) {
    
    
	return (*fun)(val1, val2);
}
int maxi(int& a, int& b) {
    
    
	return a > b ? a : b;
}
int mini(int& a, int& b) {
    
    
	return a > b ? b : a;
}
int sum(int& a, int& b) {
    
    
	return a + b;
}

int main() {
    
    
	int a = 10;
	int b = 20;
	int(*fun)(int&,int&) = maxi;//fun指针存放的是 maxi 函数的地址
	cout << "函数地址:" << maxi << "  " << fun << endl;
	cout << "函数指针使用:" << endl;
	cout << "调用了maxi函数:" << endl << process(a, b, maxi) << endl << "调用了mini函数:" << endl << process(a, b, mini) << endl << "调用了sum函数:" <<endl<< process(a, b, sum);
	return 0;
}

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/Genius_bin/article/details/113662278
Recomendado
Clasificación