SlideShare une entreprise Scribd logo
1  sur  18
PASO DE PARAMETRO POR REFERENCIA 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. 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. VER APUNTADORES.
APUNTADORES Definición: Un apuntador es una variable que contiene una dirección de memoria. Supongamos una variable de tipo entero que se llama contenido RAM y otra variable que se llama dirección RAM que puede contener una variable de tipo entero. En C/C++ una variable precedida del operador & devuelve la dirección de la variable en lugar de su contenido. Así que para asignar la dirección de una variable a otra variable del tipo que contiene direcciones se usan sentencias como estas:
APUNTADORES direccionRam = &contenidoRAM contenidoRAM se asigna a la localidad de memoria con dirección 7751
APUNTADORES se ilustra el nombre de la variable contenidoRAM y se observa que se encuentra en la dirección 7751 de la memoria. El contenido de esta localidad no se muestra. Una variable que contiene una dirección, tal como direccionRAM, se llama variable apuntador o simplemente apuntador. Después que la sentencia anterior se ejecuta, la dirección de contenidoRAM será asignada a la variable apuntador direccionRAM. La relación se expresa diciendo que direccionRAM apunta a contenidoRAM
APUNTADORES El acceso al contenido de una celda cuya dirección esta almacenada en la variable direccionRAM es tan sencillo como poner al inicio de la variable apuntador un asterisco: *direccionRAM. Lo que se ha hecho es eliminar la referencia directa. Por ejemplo, si se ejecutan las siguientes dos sentencias, el valor de la celda llamada contenidoRAM será de 20
APUNTADORES direccionRAM = &contenidoRAM;  *direccionRAM = 20; contenidoRAM se le asigna el valor entero 20
DECLARACIONES DE VARIABLES APUNTADOR C/C++ requiere una definición para cada variable. Para definir una variable apuntador direccionRAM que pueda contener la direcci´on de una variable int, se escribe: int *direccionRAM;
UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS Realmente existen dos partes separadas en esta declaración. El tipo de dato de direccionRAM es: int * y el identificador para la variable es direccionRAM 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: int *
UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS En C/C++ una variable apuntador contiene la dirección de un tipo de dato particular: char *direccion_char; char *direccion_int; El tipo de dato de dirección char es diferente del tipo de dato de la variable 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: int *direccion_int; float un_float = 98.34; direccion_int = &un_float;
UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS #include <iostream.h> usingnamespacestd; intmain (intargc, char * constargv[])  { system(‘cls’); intA_int=15, B_int=37, Temp_int; int *direccion_int; std::cout<<"El contenido de A_int es:"<<A_int<<""; std::cout<<"El contenido de B_int es:"<<B_int<<""; direccion_int = &A_int; Temp_int = *direccion_int;  *direccion_int = B_int; B_int = Temp_int; cout<<"Despues del intercambio:"<<""; cout<<"El contenido de A_int es:"<<A_int<<""; cout<<"El contenido de B_int es:"<<B_int<<""; system(‘pause’); return 0;  }
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 UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS
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 UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS
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. 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. UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS
UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS *direccion_int = B_int; Se copia Temp int en B int utilizando asignación normal.
UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS #include <iostream.h> usingnamespacestd; main()  { system(‘cls’); int a; int *apuntador;   a=7;   apuntador= &a; cout<<"la direccion de a es:"<<&a<<endl; cout<<"el valor de apuntador es:"<<apuntador<<endl; cout<<"el valor de a es:"<<a<<endl; cout<<"el valor de apuntador es:"<<*apuntador<<endl; cout<<"uso de * y &"; cout<<*&apuntador;cout<<""; cout<<&*apuntador;cout<<""; cout<<*&a; system(‘pause’); return 0;  }
UTILIZACION DE PUNTEROS CON FUNCIONES #include <iostream.h> usingnamespacestd; int cubo (int *); intmain()  { system(“cls”); int numero = 5; cout<<"el valor original de numero es:"<<numero;   cubo(&numero); cout<<""; cout<<"el nuevo valor de numero es:"<<numero; system(‘pause`); return 0;   } intcubo(int *apuntador)   {   *apuntador=*apuntador * *apuntador * *apuntador;   }
#include <iostream.h> using namespace std; int cubo(int *);  main()  {   system(‘cls’);   int numero = 5;   int *apuntador;   apuntador=&numero;   cout<<"la direccion de numero es:"<<&apuntador;   cout<<" el valor de numero es:"<<numero;   cout<<"";   cubo(&numero);   cout<<"el nuevo valor de numero es:"<<numero;   cout<<"la direccion nueva de numero es:"<<&numero;   system(‘pause’);   return 0;   }   int cubo(int *apuntador)   {   *apuntador=*apuntador * *apuntador * *apuntador;   } UTILIZACION DE PUNTEROS CON FUNCIONES
DIFERENCIA ENTRE LOS PARAMETROS POR VALOR Y POR REFERENCIA LOS PARAMETROS POR VALOR (DECLARADOS SIN &) RECIBEN COPIAS DE LOS VALORES DE LOS ARGUMENTOS QUE SE PASAN Y LA ASIGNACION A PARAMETROS POR VALOR DE UNA FUNCION NUNCA CAMBIAN EL VALOR DEL ARGUMENTO ORIGINAL PASADO A LOS PARAMETROS. LOS PARAMETROS POR REFERENCIA ( DECLARADOS CON &) RECIBEN LA DIRECCION DE LOS ARGUMENTOS PASADOS Y EN UNA FUNCION, LAS ASIGNACIONES A PARAMETROS POR REFERENCIA CAMBIAN LOS VALORES DE LOS ARGUMENTOS ORIGINALES.

Contenu connexe

Tendances

Equipo 6 comparaciones
Equipo 6 comparacionesEquipo 6 comparaciones
Equipo 6 comparaciones
gabo
 
Capitulo 2 tipos de datos en c
Capitulo 2 tipos de datos en cCapitulo 2 tipos de datos en c
Capitulo 2 tipos de datos en c
ecastelocc
 
Comenzando a programar
Comenzando a programarComenzando a programar
Comenzando a programar
Rubén Loredo
 
Elementos BáSicos Del Lenguaje Java Alumno
Elementos BáSicos Del Lenguaje Java AlumnoElementos BáSicos Del Lenguaje Java Alumno
Elementos BáSicos Del Lenguaje Java Alumno
mtemarialuisa
 

Tendances (18)

Repeticiones
RepeticionesRepeticiones
Repeticiones
 
Funciones C++ modificado
Funciones C++ modificadoFunciones C++ modificado
Funciones C++ modificado
 
Funciones en c++
Funciones en c++Funciones en c++
Funciones en c++
 
Funciones en C++
Funciones en C++Funciones en C++
Funciones en C++
 
Equipo 6 comparaciones
Equipo 6 comparacionesEquipo 6 comparaciones
Equipo 6 comparaciones
 
C++
C++C++
C++
 
Capitulo 2 tipos de datos en c
Capitulo 2 tipos de datos en cCapitulo 2 tipos de datos en c
Capitulo 2 tipos de datos en c
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Lenguaje de programacion
Lenguaje de programacionLenguaje de programacion
Lenguaje de programacion
 
Programacion C#_vbnet
Programacion C#_vbnetProgramacion C#_vbnet
Programacion C#_vbnet
 
Comenzando a programar
Comenzando a programarComenzando a programar
Comenzando a programar
 
Programacion Avanzada JavaScript
Programacion Avanzada JavaScriptProgramacion Avanzada JavaScript
Programacion Avanzada JavaScript
 
Pl Sql
Pl SqlPl Sql
Pl Sql
 
Sentencias de control
Sentencias de controlSentencias de control
Sentencias de control
 
Introdução a abap
Introdução a abapIntrodução a abap
Introdução a abap
 
Chuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantesChuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantes
 
Lenguaje de programacion C++ 1
Lenguaje de programacion C++ 1Lenguaje de programacion C++ 1
Lenguaje de programacion C++ 1
 
Elementos BáSicos Del Lenguaje Java Alumno
Elementos BáSicos Del Lenguaje Java AlumnoElementos BáSicos Del Lenguaje Java Alumno
Elementos BáSicos Del Lenguaje Java Alumno
 

Similaire à Apunfun1

Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
hassanbadredun
 
Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacion
Ysaac Ruiz
 
Lenguajec 1
Lenguajec 1Lenguajec 1
Lenguajec 1
joeshego
 
Lenguaje De ProgramacióN Basic
Lenguaje De ProgramacióN BasicLenguaje De ProgramacióN Basic
Lenguaje De ProgramacióN Basic
Rokr02
 
Apuntes apuntadores 1 a
Apuntes apuntadores 1 aApuntes apuntadores 1 a
Apuntes apuntadores 1 a
pabesacv
 
Apuntadores
ApuntadoresApuntadores
Apuntadores
luisabn
 
Fp tema 6 punteros
Fp tema 6 punterosFp tema 6 punteros
Fp tema 6 punteros
jcbenitezp
 
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
logan1725
 
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
nibox
 
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Carlos
 

Similaire à Apunfun1 (20)

Punteros
PunterosPunteros
Punteros
 
Implementacion de punteros
Implementacion de punterosImplementacion de punteros
Implementacion de punteros
 
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
 
Apuntadores y direccionamiento
Apuntadores y direccionamientoApuntadores y direccionamiento
Apuntadores y direccionamiento
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivas
 
Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacion
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silva
 
Lenguajec 1
Lenguajec 1Lenguajec 1
Lenguajec 1
 
Administración de memoria y apuntadores
Administración de memoria y apuntadoresAdministración de memoria y apuntadores
Administración de memoria y apuntadores
 
Lenguaje De ProgramacióN Basic
Lenguaje De ProgramacióN BasicLenguaje De ProgramacióN Basic
Lenguaje De ProgramacióN Basic
 
Apuntes apuntadores 1 a
Apuntes apuntadores 1 aApuntes apuntadores 1 a
Apuntes apuntadores 1 a
 
Apuntadores
ApuntadoresApuntadores
Apuntadores
 
Apunfun1
Apunfun1Apunfun1
Apunfun1
 
Introduccion a c++
Introduccion a c++Introduccion a c++
Introduccion a c++
 
Funcionesclase1
Funcionesclase1Funcionesclase1
Funcionesclase1
 
Fp tema 6 punteros
Fp tema 6 punterosFp tema 6 punteros
Fp tema 6 punteros
 
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
 
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
 
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
 

Plus de pabesacv (20)

APUNTES DE ARQUITECTURA DE COMPUTADORAS
APUNTES DE ARQUITECTURA DE COMPUTADORASAPUNTES DE ARQUITECTURA DE COMPUTADORAS
APUNTES DE ARQUITECTURA DE COMPUTADORAS
 
Apuntes empiezo (c)
Apuntes empiezo (c)Apuntes empiezo (c)
Apuntes empiezo (c)
 
Apuntes empiezo (b)
Apuntes empiezo (b)Apuntes empiezo (b)
Apuntes empiezo (b)
 
Apuntes empiezo (a)
Apuntes empiezo (a)Apuntes empiezo (a)
Apuntes empiezo (a)
 
Apuntes estructuras 1
Apuntes estructuras 1Apuntes estructuras 1
Apuntes estructuras 1
 
Apuntes de estructuras nuevo
Apuntes de estructuras nuevoApuntes de estructuras nuevo
Apuntes de estructuras nuevo
 
Unida ii 9a
Unida ii 9aUnida ii 9a
Unida ii 9a
 
Unida ii 8a
Unida ii 8aUnida ii 8a
Unida ii 8a
 
Unida ii 8a
Unida ii 8aUnida ii 8a
Unida ii 8a
 
Unida ii 7a
Unida ii 7aUnida ii 7a
Unida ii 7a
 
2 unida 4
2 unida 42 unida 4
2 unida 4
 
2 unida 3
2 unida 32 unida 3
2 unida 3
 
2 unida 2
2 unida 22 unida 2
2 unida 2
 
2 unida 1
2 unida 12 unida 1
2 unida 1
 
Unida ii 6a
Unida ii 6aUnida ii 6a
Unida ii 6a
 
Unida ii 5a
Unida ii 5aUnida ii 5a
Unida ii 5a
 
Unida ii 4a
Unida ii 4aUnida ii 4a
Unida ii 4a
 
Post y codigos de error
Post y codigos de errorPost y codigos de error
Post y codigos de error
 
Apuntes apuntadores 2 a
Apuntes apuntadores 2 aApuntes apuntadores 2 a
Apuntes apuntadores 2 a
 
Unida ii 3a
Unida ii 3aUnida ii 3a
Unida ii 3a
 

Dernier

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Dernier (11)

Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 

Apunfun1

  • 1. PASO DE PARAMETRO POR REFERENCIA 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. 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. VER APUNTADORES.
  • 2. APUNTADORES Definición: Un apuntador es una variable que contiene una dirección de memoria. Supongamos una variable de tipo entero que se llama contenido RAM y otra variable que se llama dirección RAM que puede contener una variable de tipo entero. En C/C++ una variable precedida del operador & devuelve la dirección de la variable en lugar de su contenido. Así que para asignar la dirección de una variable a otra variable del tipo que contiene direcciones se usan sentencias como estas:
  • 3. APUNTADORES direccionRam = &contenidoRAM contenidoRAM se asigna a la localidad de memoria con dirección 7751
  • 4. APUNTADORES se ilustra el nombre de la variable contenidoRAM y se observa que se encuentra en la dirección 7751 de la memoria. El contenido de esta localidad no se muestra. Una variable que contiene una dirección, tal como direccionRAM, se llama variable apuntador o simplemente apuntador. Después que la sentencia anterior se ejecuta, la dirección de contenidoRAM será asignada a la variable apuntador direccionRAM. La relación se expresa diciendo que direccionRAM apunta a contenidoRAM
  • 5. APUNTADORES El acceso al contenido de una celda cuya dirección esta almacenada en la variable direccionRAM es tan sencillo como poner al inicio de la variable apuntador un asterisco: *direccionRAM. Lo que se ha hecho es eliminar la referencia directa. Por ejemplo, si se ejecutan las siguientes dos sentencias, el valor de la celda llamada contenidoRAM será de 20
  • 6. APUNTADORES direccionRAM = &contenidoRAM; *direccionRAM = 20; contenidoRAM se le asigna el valor entero 20
  • 7. DECLARACIONES DE VARIABLES APUNTADOR C/C++ requiere una definición para cada variable. Para definir una variable apuntador direccionRAM que pueda contener la direcci´on de una variable int, se escribe: int *direccionRAM;
  • 8. UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS Realmente existen dos partes separadas en esta declaración. El tipo de dato de direccionRAM es: int * y el identificador para la variable es direccionRAM 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: int *
  • 9. UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS En C/C++ una variable apuntador contiene la dirección de un tipo de dato particular: char *direccion_char; char *direccion_int; El tipo de dato de dirección char es diferente del tipo de dato de la variable 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: int *direccion_int; float un_float = 98.34; direccion_int = &un_float;
  • 10. UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS #include <iostream.h> usingnamespacestd; intmain (intargc, char * constargv[]) { system(‘cls’); intA_int=15, B_int=37, Temp_int; int *direccion_int; std::cout<<"El contenido de A_int es:"<<A_int<<""; std::cout<<"El contenido de B_int es:"<<B_int<<""; direccion_int = &A_int; Temp_int = *direccion_int; *direccion_int = B_int; B_int = Temp_int; cout<<"Despues del intercambio:"<<""; cout<<"El contenido de A_int es:"<<A_int<<""; cout<<"El contenido de B_int es:"<<B_int<<""; system(‘pause’); return 0; }
  • 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 UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS
  • 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 UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS
  • 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. 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. UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS
  • 14. UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS *direccion_int = B_int; Se copia Temp int en B int utilizando asignación normal.
  • 15. UTILIZACION DE PUNTEROS EN SENTENCIAS SENCILLAS #include <iostream.h> usingnamespacestd; main() { system(‘cls’); int a; int *apuntador; a=7; apuntador= &a; cout<<"la direccion de a es:"<<&a<<endl; cout<<"el valor de apuntador es:"<<apuntador<<endl; cout<<"el valor de a es:"<<a<<endl; cout<<"el valor de apuntador es:"<<*apuntador<<endl; cout<<"uso de * y &"; cout<<*&apuntador;cout<<""; cout<<&*apuntador;cout<<""; cout<<*&a; system(‘pause’); return 0; }
  • 16. UTILIZACION DE PUNTEROS CON FUNCIONES #include <iostream.h> usingnamespacestd; int cubo (int *); intmain() { system(“cls”); int numero = 5; cout<<"el valor original de numero es:"<<numero; cubo(&numero); cout<<""; cout<<"el nuevo valor de numero es:"<<numero; system(‘pause`); return 0; } intcubo(int *apuntador) { *apuntador=*apuntador * *apuntador * *apuntador; }
  • 17. #include <iostream.h> using namespace std; int cubo(int *); main() { system(‘cls’); int numero = 5; int *apuntador; apuntador=&numero; cout<<"la direccion de numero es:"<<&apuntador; cout<<" el valor de numero es:"<<numero; cout<<""; cubo(&numero); cout<<"el nuevo valor de numero es:"<<numero; cout<<"la direccion nueva de numero es:"<<&numero; system(‘pause’); return 0; } int cubo(int *apuntador) { *apuntador=*apuntador * *apuntador * *apuntador; } UTILIZACION DE PUNTEROS CON FUNCIONES
  • 18. DIFERENCIA ENTRE LOS PARAMETROS POR VALOR Y POR REFERENCIA LOS PARAMETROS POR VALOR (DECLARADOS SIN &) RECIBEN COPIAS DE LOS VALORES DE LOS ARGUMENTOS QUE SE PASAN Y LA ASIGNACION A PARAMETROS POR VALOR DE UNA FUNCION NUNCA CAMBIAN EL VALOR DEL ARGUMENTO ORIGINAL PASADO A LOS PARAMETROS. LOS PARAMETROS POR REFERENCIA ( DECLARADOS CON &) RECIBEN LA DIRECCION DE LOS ARGUMENTOS PASADOS Y EN UNA FUNCION, LAS ASIGNACIONES A PARAMETROS POR REFERENCIA CAMBIAN LOS VALORES DE LOS ARGUMENTOS ORIGINALES.