¿Los nombres de las funciones se llaman variables?

En el lenguaje C, el término identificador se usa para referirse a nombres de cosas, incluyendo variables, matrices, funciones, etc. Los nombres identifican cosas. Todos los nombres de variables son identificadores, pero no todos los identificadores son nombres de variables.

Los nombres de funciones en sí mismos no son variables. No puede cambiar el valor del nombre de la función, que es la dirección de memoria del comienzo de las instrucciones de la función. (Del mismo modo, un nombre de matriz tampoco es una variable. No puede cambiar el valor del nombre de la matriz, que es la dirección de memoria del primer elemento de la matriz).

Ahora, una variable cuyo tipo de datos es puntero a función puede contener la dirección de una función (es decir, un puntero de función). Por lo tanto, puede almacenar la dirección de una función en una variable diseñada para contener la dirección de una función. Luego puede usar esa variable para llamar a la función. Pero la variable no es el nombre de la función. La variable contiene la dirección de la función.

Considere el siguiente ejemplo:

  #include 

 doble ConvertCelsiusToKelvin (doble grados Celsius) 
 {
	 volver grados Celsius - 273,15;
 }

 double ConvertKelvinToCelsius (double kelvinDegrees) 
 {
	 return kelvinDegrees + 273.15;
 }

 int main (nulo) 
 {
	 // define una variable de puntero de función
	 doble (* myFnPtr) (doble);

	 myFnPtr = ConvertCelsiusToKelvin;
	
	 printf ("Resultado 1:% f \ n", myFnPtr (42.0));

	 myFnPtr = ConvertKelvinToCelsius;

	 printf ("Resultado 2:% f \ n", myFnPtr (42.0));

	 devuelve 0;
 }

En este ejemplo, ConvertCelsiusToKelvin y ConvertKelvinToCelsius son nombres de funciones. Los valores son direcciones de memoria fijas, que son las direcciones de las primeras instrucciones en cada función. Los nombres de las funciones no son variables; No pueden ser cambiados.

Ahora, dentro de la función principal, hemos definido una variable llamada myFnPtr. Su tipo de datos es puntero a la función que recibe un doble y devuelve un doble. En otras palabras, myFnPtr es una variable de puntero de función. Podemos cambiar hacia dónde apunta. Primero almacenamos la dirección de la función ConvertCelsiusToKelvin en la variable. Entonces podemos usar myFnPtr para llamar a la función. Más tarde, podemos cambiar dónde apunta myFnPtr almacenando una dirección de función diferente en él. En este caso, almacenamos la dirección ConvertKelvinToCelsius en la variable, y utilizan la variable para llamar a la función.

Entonces, los nombres de las funciones son identificadores cuyos valores son las direcciones de las funciones, pero no son variables. La variable de puntero de función myFnPtr es una variable, y podemos almacenar diferentes direcciones de función en esa variable y usar esa variable para llamar a las funciones.

(Este es un ejemplo artificial, y no demuestra un uso típico de punteros de función, pero ilustra la distinción entre nombres de función y variables de puntero de función).

No, se llaman nombres de funciones.

Lo único en común entre funciones y variables es que ambos tienen nombres de pila.

Los nombres de funciones son la dirección de una función en el espacio de texto / código. Sin eso, no tiene forma de hacer referencia a ese grupo particular de código.

Las funciones realizan acciones sobre variables.

Las variables pueden contener valores. Ese valor puede ser la dirección de funciones, permitiendo así invocaciones indirectas de una función.

No. Se llaman nombres de funciones.

[En algunos lenguajes (p. Ej., C) puede tener punteros de función, y se colocarán en una variable. Este es un uso avanzado que muchos no aprenden o no necesitan. Algo similar, donde las líneas están borrosas, está disponible en otros idiomas.]