PASO DE PARAMETRO POR REFERENCIA<br />CUANDO UNA FUNCION DEBE MODIFICAR EL VALOR DEL PARAMETRO PASADO Y DEVOLVER ESTE VALO...
APUNTADORES<br />Definición: Un apuntador es una variable que contiene una dirección de memoria.<br />Supongamos una varia...
APUNTADORES<br />direccionRam = &contenidoRAM<br />contenidoRAM se asigna a la localidad de memoria con dirección 7751<br />
APUNTADORES<br />se ilustra el nombre de la variable contenidoRAM y se observa<br />que se encuentra en la dirección 7751 ...
APUNTADORES<br />El acceso al contenido de una celda cuya dirección esta almacenada en la<br />variable direccionRAM es ta...
APUNTADORES<br />direccionRAM = &contenidoRAM;<br /> *direccionRAM = 20;<br />contenidoRAM se le asigna el valor entero 20...
DECLARACIONES DE VARIABLES APUNTADOR<br />C/C++ requiere una definición para cada variable. Para definir una variable<br /...
UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS<br />Realmente existen dos partes separadas en esta declaración. El tipo d...
UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS<br />En C/C++ una variable apuntador contiene la dirección de un tipo de d...
UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS<br />#include <iostream.h><br />usingnamespacestd;<br />intmain (intargc, ...
En la lınea (05) se han declarado tres variables de tipo entero, se da a cada celda un nombre y se inicializan 2 de estas....
En la lınea (06) se define un apuntador a un tipo de dato entero llamado dirección int. La sentencia asigna la celda y da ...
La lınea (11) utiliza la expresión *direccion_int para acceder al contenido de la celda a la cual apunta direccion_int: Te...
UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS<br />*direccion_int = B_int;<br />Se copia Temp int en B int utilizando as...
UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS<br />#include <iostream.h><br />usingnamespacestd;<br />main()<br /> {<br ...
UTILIZACION DE PUNTEROS CON FUNCIONES<br />#include <iostream.h><br />usingnamespacestd;<br />int cubo (int *);<br />intma...
#include <iostream.h><br />using namespace std;<br />int cubo(int *);<br /> main()<br /> {<br />  system(‘cls’);<br />  in...
DIFERENCIA ENTRE LOS PARAMETROS POR VALOR Y POR REFERENCIA<br />LOS PARAMETROS POR VALOR (DECLARADOS SIN &) RECIBEN COPIAS...
Próxima SlideShare
Cargando en…5
×

Apunfun1

1.650 visualizaciones

Publicado el

Publicado en: Tecnología, Deportes
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
1.650
En SlideShare
0
De insertados
0
Número de insertados
1.149
Acciones
Compartido
0
Descargas
6
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Apunfun1

  1. 1. PASO DE PARAMETRO POR REFERENCIA<br />CUANDO UNA FUNCION DEBE MODIFICAR EL VALOR DEL PARAMETRO PASADO Y DEVOLVER ESTE VALOR MODIFICADO A LA FUNCION LLAMADORA, SE HA DE UTILIZAR EL METODO DE PASO DE PARAMETRO POR REFERENCIA.<br />EN ESTE METODO EL COMPILADOR PASA LA DIRECCION DE MEMORIA DEL VALOR DEL PARAMETRO A LA FUNCION. CUANDO SE MODIFICA EL VALOR DEL PARAMETRO (LA VARIABLE LOCAL), ESTE VALOR QUEDA ALMACENADO EN LA MISMA DIRECCION DE MEMORIA, POR LO QUE AL RETORNAR A LA FUNCION LLAMADORA LA DIRECCION DE LA MEMORIA DONDE SE ALMACENO EL PARAMETRO CONTENDRA EL VALOR MODIFICADO.<br />VER APUNTADORES.<br />
  2. 2. APUNTADORES<br />Definición: Un apuntador es una variable que contiene una dirección de memoria.<br />Supongamos una variable de tipo entero que se llama contenido RAM y otra<br />variable que se llama dirección RAM que puede contener una variable de tipo<br />entero. En C/C++ una variable precedida del operador & devuelve la dirección<br />de la variable en lugar de su contenido. Así que para asignar la dirección de<br />una variable a otra variable del tipo que contiene direcciones se usan sentencias como estas:<br />
  3. 3. APUNTADORES<br />direccionRam = &contenidoRAM<br />contenidoRAM se asigna a la localidad de memoria con dirección 7751<br />
  4. 4. APUNTADORES<br />se ilustra el nombre de la variable contenidoRAM y se observa<br />que se encuentra en la dirección 7751 de la memoria. El contenido de esta<br />localidad no se muestra. Una variable que contiene una dirección, tal como<br />direccionRAM, se llama variable apuntador o simplemente apuntador.<br />Después que la sentencia anterior se ejecuta, la dirección de contenidoRAM<br />será asignada a la variable apuntador direccionRAM. La relación se expresa<br />diciendo que direccionRAM apunta a contenidoRAM<br />
  5. 5. APUNTADORES<br />El acceso al contenido de una celda cuya dirección esta almacenada en la<br />variable direccionRAM es tan sencillo como poner al inicio de la variable<br />apuntador un asterisco: *direccionRAM. Lo que se ha hecho es eliminar la<br />referencia directa. Por ejemplo, si se ejecutan las siguientes dos sentencias, el<br />valor de la celda llamada contenidoRAM será de 20<br />
  6. 6. APUNTADORES<br />direccionRAM = &contenidoRAM;<br /> *direccionRAM = 20;<br />contenidoRAM se le asigna el valor entero 20<br />
  7. 7. DECLARACIONES DE VARIABLES APUNTADOR<br />C/C++ requiere una definición para cada variable. Para definir una variable<br />apuntador direccionRAM que pueda contener la direcci´on de una variable<br />int, se escribe:<br />int *direccionRAM;<br />
  8. 8. UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS<br />Realmente existen dos partes separadas en esta declaración. El tipo de dato<br />de direccionRAM es:<br />int *<br />y el identificador para la variable es<br />direccionRAM<br />El asterisco que sigue a int significa “apuntador a”. Esto es, el siguiente tipo de dato es una variable apuntador que puede contener una dirección a un int:<br />int *<br />
  9. 9. UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS<br />En C/C++ una variable apuntador contiene la dirección de un tipo de dato<br />particular:<br />char *direccion_char;<br />char *direccion_int;<br />El tipo de dato de dirección char es diferente del tipo de dato de la variable<br />apuntador dirección int. En un programa que define un apuntador a un tipo de dato y utiliza este para apuntar a otro tipo de dato, pueden ocurrir errores en tiempo de ejecución y advertencias en tiempo de compilación. Una practica de programación pobre sería definir un apuntador de una forma y luego utilizar este de alguna otra forma. Por ejemplo:<br />int *direccion_int;<br />float un_float = 98.34;<br />direccion_int = &un_float;<br />
  10. 10. UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS<br />#include <iostream.h><br />usingnamespacestd;<br />intmain (intargc, char * constargv[]) <br />{<br />system(‘cls’);<br />intA_int=15, B_int=37, Temp_int;<br />int *direccion_int;<br />std::cout<<"El contenido de A_int es:"<<A_int<<"n";<br />std::cout<<"El contenido de B_int es:"<<B_int<<"n";<br />direccion_int = &A_int;<br />Temp_int = *direccion_int;<br /> *direccion_int = B_int;<br />B_int = Temp_int;<br />cout<<"Despues del intercambio:"<<"nn";<br />cout<<"El contenido de A_int es:"<<A_int<<"n";<br />cout<<"El contenido de B_int es:"<<B_int<<"n";<br />system(‘pause’);<br />return 0;<br /> }<br />
  11. 11. En la lınea (05) se han declarado tres variables de tipo entero, se da a cada celda un nombre y se inicializan 2 de estas. Supondremos que la dirección de memoria asignada para la variable A int es la dirección 5328, y la dirección en memoria RAM asignada para la variable B int es la dirección 7916, y la celda llamada Temp int se le ha asignado la dirección 2385<br />UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS<br />
  12. 12. En la lınea (06) se define un apuntador a un tipo de dato entero llamado dirección int. La sentencia asigna la celda y da a esta un nombre. Luego, en la lınea (09), la tercera sentencia asigna a direccion_int la dirección de A_int<br />UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS<br />
  13. 13. La lınea (11) utiliza la expresión *direccion_int para acceder al contenido de la celda a la cual apunta direccion_int: Temp_int = *direccion_int; Por consiguiente, el valor entero 15 se almacena en la variable Temp_int. Si no se pone el * enfrente de direccion_int;, la sentencia de asignación almacenarıa ilegalmente el contenido de direccion_int en la celda nombrada Temp_int, pero se supone que Temp_int contiene un entero, no una dirección.<br />Este puede ser un error muy difıcil de localizar puesto que muchos compiladores no emiten ninguna advertencia/error. Para empeorar el asunto, la mayorıa de los apuntadores son cercanos, lo que significa que ocupan 2 bytes (4 bytes para aplicaciones de 32-bits), el mismo tamaño que un entero en una PC. La sentencia (11) copia el contenido de la variable B int en la celda apuntada por la dirección almacenada en dirección int.<br />UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS<br />
  14. 14. UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS<br />*direccion_int = B_int;<br />Se copia Temp int en B int utilizando asignación normal.<br />
  15. 15. UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS<br />#include <iostream.h><br />usingnamespacestd;<br />main()<br /> {<br />system(‘cls’);<br />int a;<br />int *apuntador;<br /> a=7;<br /> apuntador= &a;<br />cout<<"la direccion de a es:n"<<&a<<endl;<br />cout<<"el valor de apuntador es:n"<<apuntador<<endl;<br />cout<<"el valor de a es:n"<<a<<endl;<br />cout<<"el valor de apuntador es:n"<<*apuntador<<endl;<br />cout<<"uso de * y &n";<br />cout<<*&apuntador;cout<<"n";<br />cout<<&*apuntador;cout<<"n";<br />cout<<*&a;<br />system(‘pause’);<br />return 0;<br /> }<br />
  16. 16. UTILIZACION DE PUNTEROS CON FUNCIONES<br />#include <iostream.h><br />usingnamespacestd;<br />int cubo (int *);<br />intmain()<br /> {<br />system(“cls”);<br />int numero = 5;<br />cout<<"el valor original de numero es:n"<<numero;<br /> cubo(&numero);<br />cout<<"n";<br />cout<<"el nuevo valor de numero es:n"<<numero;<br />system(‘pause`);<br />return 0;<br /> }<br />intcubo(int *apuntador)<br /> {<br /> *apuntador=*apuntador * *apuntador * *apuntador;<br /> }<br />
  17. 17. #include <iostream.h><br />using namespace std;<br />int cubo(int *);<br /> main()<br /> {<br /> system(‘cls’);<br /> int numero = 5;<br /> int *apuntador;<br /> apuntador=&numero;<br /> cout<<"la direccion de numero es:n"<<&apuntador;<br /> cout<<"n el valor de numero es:n"<<numero;<br /> cout<<"n";<br /> cubo(&numero);<br /> cout<<"el nuevo valor de numero es:n"<<numero;<br /> cout<<"nla direccion nueva de numero es:n"<<&numero;<br /> system(‘pause’);<br /> return 0;<br /> }<br /> int cubo(int *apuntador)<br /> {<br /> *apuntador=*apuntador * *apuntador * *apuntador;<br /> }<br />UTILIZACION DE PUNTEROS CON FUNCIONES<br />
  18. 18. DIFERENCIA ENTRE LOS PARAMETROS POR VALOR Y POR REFERENCIA<br />LOS PARAMETROS POR VALOR (DECLARADOS SIN &) RECIBEN COPIAS DE LOS VALORES DE LOS ARGUMENTOS QUE SE PASAN Y<br />LA ASIGNACION A PARAMETROS POR VALOR DE UNA FUNCION NUNCA CAMBIAN EL VALOR DEL ARGUMENTO ORIGINAL PASADO A LOS PARAMETROS.<br />LOS PARAMETROS POR REFERENCIA ( DECLARADOS CON &) RECIBEN LA DIRECCION DE LOS ARGUMENTOS PASADOS Y<br />EN UNA FUNCION, LAS ASIGNACIONES A PARAMETROS POR REFERENCIA CAMBIAN LOS VALORES DE LOS ARGUMENTOS ORIGINALES.<br />

×