Cómo pasar punteros a funciones en c ++

Uno de los usos de las variables de puntero en C ++ es en el paso de argumentos a las funciones. Para entender por qué esto es importante, es necesario entender cómo se transmiten los parámetros a la función.

Pasando por valor en C ++

Por defecto, los parámetros se pasan a las funciones por valor. Esto tiene como resultado un tanto sorprendente que el cambio del valor de una variable en una función normalmente no cambia su valor en la función de llamada. Consideremos el siguiente segmento de código ejemplo:

Video: C++ - #3 Punteros como parametros y punteros a funciones

fn void (int nArg) {nArg = 10 - // valor de nArg en este punto es 10} padre void (void) {int n1 = 0-fn (n1) - // valor de n1 en este punto es todavía 0}

Aquí el padre() función inicializa la variable de número entero n1 a 0. El valor de n1 se hace pasar luego a fn (). Al entrar en la función, nArg es igual a 0, el valor pasado. fn () cambia el valor de nArg a 10 antes de volver a padre(). A su regreso a padre(), El valor de n1 todavía es 0.

La razón de este comportamiento es que C ++ no pasa una variable a una función. En lugar de ello, C ++ pasa el valor contenido en la variable en el momento de la llamada. Es decir, se evalúa la expresión, incluso si es sólo un nombre de variable, y se pasa el resultado.

En el ejemplo, el valor de n1, que es 0, se pasó a fn (). Lo que hace la función con ese valor no tiene ningún efecto sobre n1.

Video: Bloque 4.4: Punteros y Paso por Referencia

Pasando valores de puntero en C ++

Al igual que cualquier otro tipo intrínseco, un puntero se puede pasar como argumento a una función:

fn vacío (int * pnArg) {*} pnArg = 10 padres (void) {int n = 0-FN (&n) - // esto pasa la dirección de i // Ahora el valor de n es 10}

En este caso, la dirección de norte se pasa a la función de fn () en lugar del valor de norte. La importancia de esta diferencia es evidente cuando se tiene en cuenta la asignación dentro de fn ().

Suponer norte está ubicado en la dirección 0x100. Más bien que el valor 10, la llamada fn (&norte) pasa el 0x100 valor. Dentro fn (), la asignación *pnArg = 10 almacena el valor 10 en el int variable ubicada en la ubicación 0x100, sobrescribiendo así el valor 0. Al regresar a padre(), El valor de norte es 10 porque norte es sólo otro nombre para 0x100.

Pasando por referencia en C ++

C ++ proporciona una forma rápida para pasar argumentos por dirección - una taquigrafía que le permite evitar tener que molestar con punteros. La siguiente declaración crea una variable n1 y una segunda referencia a la misma n1 pero con un nuevo nombre, nRef:

Video: Aprendiendo A Programar En C #39 - Punteros y Funciones

int n1 - // declarar un variableint int& nRef = n1 - // declarar una segunda referencia a n1nRef = 1- // ahora el acceso a la referencia // tiene el mismo efecto que n1 acceso - // n1 es ahora igual a 1

Una variable de referencia como nRef debe ser inicializado cuando se declara, porque cada vez subsiguiente que se utiliza su nombre, C ++ asumirá que quiere decir que la variable nRef se refiere a.

Las variables de referencia encuentran su principal aplicación en las llamadas a funciones:

fn void (int& rnArg) // declarar argumento de referencia {rnArg = 10 - // cambiar el valor de la variable ...} //...that rnArg refiere padres tovoid (void) {int n 1 = 0-fn (n1) - // pasar una referencia a // n1 aquí el valor de n1 es 10}

Se llama pasando por referencia. La declaracion int& rnArg declara rnArg a ser una referencia a un argumento entero. los fn () función almacena el valor 10 en el int lugar al que hace referencia rnArg.

Pasando por referencia es la misma que pasa a la dirección de una variable. La sintaxis de referencia pone la responsabilidad en C ++ para aplicar la “dirección de” operador de la referencia en lugar de requerir que el programador para hacerlo.

No se puede sobrecargar un pase por la función de valor con su paso por equivalente de referencia. Por lo tanto, no se podía definir las dos funciones fn (int) y fn (int&) en el mismo programa. C ++ no sabría cuál de ellos para llamar.

Artículos Relacionados