Los punteros a funciones en c ++

Cuando se ejecuta una aplicación, existen las funciones de la aplicación en la memoria- así como cualquier otra cosa en la memoria, que tienen una dirección. Y tener una dirección es buena, porque de esa manera, las personas pueden encontrar.

Puede tomar la dirección de una función, tomando el nombre de él y poniendo el Dirección de operador (&) Delante del nombre de la función, así:

dirección = &MyFunction-

Pero para que esto funcione, es necesario saber qué tipo de declarar dirección. los dirección variable es un puntero a una función, y la manera más limpia para asignar un tipo es utilizar una typedef. (Afortunadamente, esta es una época en que la mayoría de la gente está dispuesta a utilizar una typedef.)

Aquí esta la typedef, por extraño que parezca:

typedef int (* FunctionPtr) (int) -

Es difícil de seguir, pero el nombre del nuevo tipo es FunctionPtr. Esta define un tipo de llamada FunctionPtr que devuelve un entero (la más a la izquierda int) Y toma un entero como un parámetro (el más a la derecha int, que debe estar en paréntesis).

Video: Tutorial C Punteros de funciones

La parte central de esta declaración es el nombre del nuevo tipo, y que debe preceder por un asterisco, lo que significa que es un puntero a todo el resto de la expresión. Además, hay que poner el nombre del tipo y su asterisco delante dentro de paréntesis.

Y entonces usted está listo para declarar algunas variables! Aquí va:

Dirección FunctionPtr = &MyFunction-

Esta línea declara dirección como un puntero a una función y lo inicializa a MyFunction (). Ahora bien, para que esto funcione, el código de MyFunction () deben tener el mismo prototipo declarado en el typedef: En este caso, se debe tener un número entero como un parámetro y devolver un entero.

Así, por ejemplo, puede tener una función como esta:

int TheSecretNumber (int x) {return x + 1-}

Posteriormente, se podría tener una principal() que almacena la dirección de esta función en una variable - y luego llama a la función mediante el uso de la variable:

int main (int argc, char * argv []) {int typedef (* FunctionPtr) (int) dirección -INT MyPasscode = 20-FunctionPtr = &TheSecretNumber-cout lt; lt; dirección (MyPasscode) lt; lt; endl-}

Ahora, solo así se puede decir que lo has visto, esto es lo que la dirección declaración se vería sin usando un typedef:

int (* dirección) (int) = &TheSecretNumber-

El regalo debe ser que usted tiene dos cosas en paréntesis al lado del otro, y el conjunto de la derecha sólo tiene tipos dentro de él. El de la izquierda tiene un nombre de variable. Así que esta línea no está declarando una de tipo más bien, se declara una variable.

Artículos Relacionados