Aprender de los punteros de C++ para captar (4 / 6 paso)

Paso 4: Utilización de punteros

PASAR ARGUMENTOS A UNA FUNCIÓN

Hay dos formas de pasar argumentos a una función: por valor o por referencia.

PASAR ARGUMENTOS POR VALOR

Normalmente, se pasan argumentos a funciones por valor, lo que significa que es el valor de la variable que se pasa a la función y no la variable sí mismo.

Las implicaciones de esto evidente en el fragmento siguiente de código:

void fn (int nArg1, int nArg2)
{
modificar los valores de los argumentos
nArg1 = 10;
nArg2 = 20;
}

principal de la int (int nNumberofArgs, char * pszArgs [])
{
initiaize dos variables y mostrar sus valores
int nValue1 = 1;
int nValue2 = 2;

ahora probar y modificar llamando a una función

FN (nValue1, nValue2);

¿Cuál es el valor de nValue1 y nValue2 ahora?
cout cout
sistema ("PAUSE")
return 0;

}

Este programa declara dos variables, nValue1 y nValue2, inicializa a un valor conocido y pasa sus valores a una función de (fn). Esta función cambia el valor de sus argumentos y simplemente vuelve.

Pregunta: ¿Qué es el valor de nValue1 y nValue2 (principal) después de que se devuelve el control de (fn)?

Respuesta: El valor de nValue1 y nValue2 permanecen inalterados en el 1 y 2, respectivamente.

Para entender por qué, examinar cuidadosamente cómo C++ maneja memoria en la llamada (fn). C++ almacena variables locales (como nValue1 y nValue2) en una zona especial de memoria conocida como la pila. Entrada en una función, C++ figuras cómo mucha memoria de pila la función requiere y entonces reserva esa cantidad. Decir, por el bien del argumento, que en este ejemplo, la memoria de pila tallada hacia fuera (principal) comienza en la ubicación 0x1000 y se extiende hasta 0x101F. En este caso, podría ser nValue1 en lugar 0x1000 y nValue2 podría ser en lugar de 0x1004.

(NOTA: SI ESTÁ UTILIZANDO CODE::BLOCKS, UN INT OCUPA 4 BYTES.)

Como parte de la llamada (fn), C++ primero almacena los valores de cada argumento en la pila a partir de la discusión de la derecha y trabajando su camino a la izquierda.

Lo último que C++ almacena como parte de la llamada es la dirección de retorno para que la función sabe donde volver después de que sea completa.

Por razones que tienen que ver más con el funcionamiento interno de la CPU, la pila de "crece hacia abajo", lo que significa la memoria utilizada por (fn) tendrá direcciones más pequeño que 0x1000.

Recuerde que esto es sólo un posible diseño de la memoria. No sabe (o cuidado) que cualquiera de estos en realidad son las direcciones reales utilizadas por C++ en esta o cualquier otra llamada de función.

La función fn (int, int) contiene dos afirmaciones:

nArg1 = 10;
nArg2 = 20;

El punto principal de decir esto es demostrar el hecho de que cambiando los valores de nArg1 y nArg2 no tiene ningún efecto en las variables originales en nValue1 y nValue2.

PASAR ARGUMENTOS POR REFERENCIA

Así que ¿qué pasa si quería los cambios realizados por (fn) sea permanente? Podría hacer esto por pasar no el valor de las variables, pero su dirección. Esto se demuestra por el siguiente fragmento de código:

void fn (int * pnArg1, int * pnArg2)
{
modificar el valor de los argumentos
* pnArg1 = 10;
* pnArg2 = 20;
}

principal de la int (int nNumberofArgs, char * pszArgs [])
{
inicializar dos variables y mostrar sus valores
int nValue1 = 1;
int nValue2 = 2;

FN (nValue1 & nValue2);

sistema ("PAUSE")
return 0;
}

Primero, observe que los argumentos de (fn) son ahora declarados no enteros sino punteros a enteros. La llamada a fn (int *, int *) pasa no el valor de las direcciones de las variables nValue1 y nValue2 pero mesas.

Mediante el uso de los punteros, los cambios realizados en las dos variables se convierten en permanentes. Sin usar los punteros, los cambios sólo se realizan a los valores copiados (fn).

Artículos Relacionados

Aerógrafo básico - estos son los conceptos básicos para aprender a aerógrafo

Aerógrafo básico - estos son los conceptos básicos para aprender a aerógrafo

Lo básico del aerógrafo, cambiando colores - montaje - desmontaje - limpieza - los mejores videos gratis están aquí cambio de colores - desmontaje - limpieza - montajeTodo el mundo necesita saber lo básico para poder cuidar de su nueva pieza de mater
Los idiotas guían para pokemon

Los idiotas guían para pokemon

bien, después de ver KVG super freak de builder's instructable aunque dejó muchos. Estoy aquí para aclarar las cosas.Pokemon es un juego de cartas, juego de video, y TV show. voy a hablar sobre todos ellos en este instructable.Paso 1: juego de cartas
Ingeniería inversa para emular los cartuchos de tinta para una impresora Epson

Ingeniería inversa para emular los cartuchos de tinta para una impresora Epson

durante los últimos dos años, he estado planeando construir yo mismo una impresora 3D de algunas impresoras de inyección de tinta viejo que yo había recogido durante los años. Pero no hasta hace dos semanas había hecho empecé a trabajar en él.La impr
Modificación de un llavero de puntero Laser barato para uso General

Modificación de un llavero de puntero Laser barato para uso General

Casi todos han jugado con un puntero láser antes, especialmente los que tienen gatos. En los Laboratorios de H3 encontramos estos particulares en un dólar almacenar y ponerlos para utilizar en nuestro proyecto de pista de herramienta de poder.Estos l
Usando los botones y sensores para hacer música con el Edison de Intel

Usando los botones y sensores para hacer música con el Edison de Intel

ObjetivosSentirse cómodo con el Edison al prototipo de un proyecto de hardwareConstruir una sencilla aplicación de Node.jsJugar con el poder de WebSockets y redes de tiempo realAprovechar de Cylon.js fácil de usar interfaz con botones y sensoresExplo
Puntero de Dremel para el modelado preciso

Puntero de Dremel para el modelado preciso

cada vez que estoy tratando de Dremel un trozo más fino a una altura específica, utilizar una Dremel montada en una mesa especial que se monta en la mesa de trabajo. Sin embargo, si la broca Dremel no va todo el camino a través de la pieza, no puedo
Que los niños listos para pintar

Que los niños listos para pintar

poner las camisetas, ropa o delantales en.  Tomar las fotos.Establecer directrices, si es necesario.  Digo a mis hijos que si quieren levantarse, tienen que ir a lavarse las manos primero o me piden una toallita.  Esto es para que nada consigue la pi
Cómo jugar los acordes del Piano para principiantes

Cómo jugar los acordes del Piano para principiantes

En este instructable, usted aprenderá cómo tocar cualquier acorde mayor o menor en el piano.¿Qué es un acorde?Un acorde es una combinación de notas al mismo tiempo. Hay tipos de acordes diferentes pero acordes mayores y menores son los más comunes y
Los mangos de madera para las sartenes de hierro fundido

Los mangos de madera para las sartenes de hierro fundido

Quería una manija para mis sartenes de hierro fundido, así que no siempre tengo que usar una toalla para agarrarlos. Compré un mango de silicon para este propósito, pero cuando se quedó en la sartén que se convirtió demasiado caliente para manejar. E
Los Hackers HEMA: Inserciones para guantes de lacrosse

Los Hackers HEMA: Inserciones para guantes de lacrosse

IntroducciónBienvenidos a la primera instructables de la comunidad de facebook: Hackers de HEMA. Una comunidad que se centra en compartir y desarrollar ideas de modificación de equipos.El dedo inserta (imagen 1) en esta "modificación", mira en p
Los sostenedores de taza para un mini refrigerador de montaje

Los sostenedores de taza para un mini refrigerador de montaje

Yo estoy planeando un viaje de camping regreso a la playa con mi esposa este verano y quería una nevera pequeña, con ruedas con sostenedores de taza empotrada en la tapa. No existe. La más pequeña nevera con ruedas que encontré con sostenedores de ta
Cómo utilizar el rodillo de losa y bajar moldes para hacer un tazón de fuente

Cómo utilizar el rodillo de losa y bajar moldes para hacer un tazón de fuente

esto le mostrará cómo utilizar mi otros dos instructables (rodillo de la losa y el molde de la depresión) para mano-construye un tazón de fuente.Paso 1: Materiales necesarios Se necesita:Arcilla,Rodillo de la losa,Perno de balanceo,Molde de la depres
Los titulares de tarjetas (para el bolsillo)

Los titulares de tarjetas (para el bolsillo)

siempre soy flexión y aplastamiento mis tarjetas en mi bolsillo. así que hice algo que sostenerlos y mantenerlos seguros mientras trabajo...Funciona muy bien y se ve con clase cuando yo les entregue.Paso 1: reunir tus cosas *** Seguridad primera ***U
Para soldar los alambres múltiples para una Junta de distribución

Para soldar los alambres múltiples para una Junta de distribución

A veces es necesario dividir/señal de energía de un solo cable para varias salidas. Normalmente prefiero usar un bloque terminal y distribución para algo como esto, pero a veces no es factible, como cuando está limitado el espacio o todo lo que neces