El documento explica la diferencia entre pasar parámetros por valor y por referencia en C++. Los parámetros por valor reciben una copia del valor del argumento, por lo que los cambios no afectan al argumento original. Los parámetros por referencia reciben la dirección de memoria del argumento, por lo que los cambios realizados dentro de la función sí afectan al argumento original.
1. APUNTADORES
UTILIZADOS EN
PARAMETROS POR
REFERENCIA, CUANDO UNA
VARIABLE APUNTA A UNA
DIRECCION DE MEMORIA
DE OTRA VARIABLE
2. PASO DE PARAMETRO POR
REFERENCIA
O 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.
O 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.
O VER APUNTADORES.
3. APUNTADORES
O Definición: Un apuntador es una variable que
contiene una dirección de memoria.
O En C y C++ una variable precedida del operador &
devuelve la dirección y el valor a la variable
siempre y cuando esta sea declarada como
variable apuntador.
O Ejem.
O Int x;
O Int *apuntador, z;
O Observe el ejemplo anterior y vera que la variable
x es una variable declarada de tipo entero, la
variable llamada apuntador es una variables de
tipo apuntador, mas no así la variable z que es una
variable de tipo entero
4. Apuntadores
O De lo anterior tenemos lo siguiente.
O Int x;
O Int *apuntador;
O X=7;
O Apuntador=&x;
O Esto queda de la siguiente manera, declaro una
variable de tipo entero x, una variable llamada
apuntador de tipo apuntador, después x toma el
valor de 7 pero al momento de realizar la
instrucción apuntador=&x; el valor y la dirección de
x pasa a la variable apuntador, y se expresa como
que la variable apuntador apunta a la variable x va
y toma su dirección y su valor.
5. UTILIZACION DE PUNTEROS
EN SENTENCIAS SENCILLAS
#include <iostream>
using namespace std;
main()
{
system(“cls”);
int a;
int *apuntador;
a=7;
apuntador= &a;
cout<<"la direccion de a es:n"<<&a<<endl;
cout<<“la direccion de apuntador es:n"<<apuntador<<endl;
system(“pause”);
return 0;
}
Así tenemos que imprime la misma dirección en a y en la variable apuntador.
6. O #include <iostream>
O using namespace std;
O main()
O {
O system(“cls”);
O int a;
O int *apuntador;
O cout<<“la direccion de apuntador es:n"<<apuntador<<endl;
O a=7;
O apuntador= &a;
O cout<<"la direccion de a es:n"<<&a<<endl;
O cout<<“la direccion de apuntador es:n"<<apuntador<<endl;
O system(“pause”);
O return 0;
O }
O Aquí vemos que la variable apuntador imprime su direccion, real y despues
imprime la direccion de a y la direccion de apuntador cambia a la misma
direccion de a ya que apuntador apunto a a y trajo su direccion .
7. O #include <iostream>
O using namespace std;
O main()
O {
O system(“cls”);
O int a;
O int *apuntador;
O cout<<“la direccion de apuntador es:n"<<apuntador<<endl;
O a=7;
O apuntador= &a;
O cout<<"la direccion de a es:n"<<&a<<endl;
O cout<<“la direccion de apuntador es:n"<<apuntador<<endl;
O // a partir de las siguientes lineas se imprime el mismo valor de a y de apuntador
O // note que para imprimir una variable de tipo apuntador esta va precedida del *
O // tambien debe DE QUEDAR CLARO QUE UNA VARIABLE DE TIPO APUNTADOR POR SI SOLA
O // NO IMPRIME EL VALOR DE ELLA, SOLO SU DIRECCION E IMPRIME EL VALOR CUANDO ES
O //PRECEDIDA POR EL * PERO SOLO IMPRIME EL VALOR DE LA VARIABLE A LA CUAL APUNTO
O cout<<“el valor de a es:n"<<a<<endl;
O cout<<“el valor de apuntador es:n"<<*apuntador<<endl;
O system(“pause”);
O return 0;
O }
8. UTILIZACION DE PUNTEROS CON
FUNCIONES
#include <iostream>
using namespace std;
int cubo (int *);
int main()
{
system(“cls”);
int numero = 5;
cout<<"el valor original de numero es:n"<<numero;
cubo(&numero);
cout<<"n";
cout<<"el nuevo valor de numero es:n"<<numero;
system(„pause`);
return 0;
}
int cubo(int *apuntador)
{
return *apuntador=*apuntador * *apuntador * *apuntador;
}
9. O #include <iostream>
O using namespace std;
O int cubo (int *);
O int main()
O {
O system("cls");
O int numero = 5;
O cout<<"el valor original de numero es:n"<<numero;
O cubo(&numero);
O cout<<"n";
O system("pause");
O return 0;
O }
O int cubo(int *apuntador)
O {
O *apuntador=*apuntador * *apuntador * *apuntador;
O cout<<"el nuevo valor de numero es:n"<<*apuntador;
O }
10. #include <iostream>
using namespace std;
int cubo (int *);
int main()
{
system("cls");
int numero = 5;
int *apuntador;
apuntador=№
cout<<"la direccion de numero es:n"<<&apuntador;
cout<<"n el valor de numero es:n"<<numero;
cout<<"el valor de numero es:n"<<*apuntador;
cout<<"n";
cubo(&numero);
cout<<"el nuevo valor de numero es:n"<<numero;
cout<<"nla direccion nueva de numero es:n"<<*apuntador;
cout<<"la direccion de numero es:n"<<&apuntador;
system("pause");
return 0;
}
int cubo(int *apuntador)
{
return *apuntador=*apuntador * *apuntador * *apuntador;
}
11. O #include <iostream>
O using namespace std;
O int numero;
O int *apuntador;
O int cubo (int * );
O int main()
O {
O system("cls");
O
O numero=5;
O apuntador=№
O cout<<"la direccion de numero es:n"<<&apuntador;
O cout<<"n el valor de numero es:n"<<numero;
O cout<<"el valor de numero es:n"<<*apuntador;
O cout<<"n";
O cubo(&numero);
O
O system("pause");
O return 0;
O }
O int cubo(int *apuntador )
O {
O *apuntador=*apuntador * *apuntador * *apuntador;
O cout<<"el nuevo valor de numero es:n"<<numero;
O cout<<"nla direccion nueva de numero es:n"<<*apuntador;
O cout<<"la direccion de numero es:n"<<&apuntador;
O }
12. O # include "iostream"
O using namespace std;
O int a,b,c;
O int suma(int *);
O int *apuntador,*apuntador1,*e;
O int main()
O {
O
O system("cls");
O cout<<"dame a ";
O cin>>a;
O cout<<"dame b ";
O cin>>b;
O c=a+b;
O suma(&c);
O cout<<c;
O cout<<"n";
O cout<<*e;
O cout<<"n";
O cout<<&c;
O cout<<"n";
O cout<<e;
O cout<<"n";
O cout<<&e;
O cout<<"n";
O system("pause");
O return 0;
O }
O
O int suma (int *)
O {
O apuntador=&a;
O apuntador1 = &b;
O e = &c;
O return *e;
O
O
O }
13. O # include "iostream"
O using namespace std;
O int a,b,c;
O int suma(int *);
O int *apuntador,*apuntador1,*e;
O int main()
O {
O
O system("cls");
O cout<<"dame a ";
O cin>>a;
O cout<<"dame b ";
O cin>>b;
O c=a+b;
O suma(&c);
O
O system("pause");
O return 0;
O }
O
O int suma (int *)
O {
O apuntador=&a;
O apuntador1 = &b;
O e = &c;
O cout<<c;
O cout<<"n";
O cout<<*e;
O cout<<"n";
O cout<<&c;
O cout<<"n";
O cout<<e;
O cout<<"n";
O cout<<&e;
O cout<<"n";
O
O
O }
14. DIFERENCIA ENTRE LOS PARAMETROS
POR VALOR Y POR REFERENCIA
O LOS PARAMETROS POR VALOR
(DECLARADOS SIN &) RECIBEN COPIAS
DE LOS VALORES DE LOS ARGUMENTOS
QUE SE PASAN Y
O LA ASIGNACION A PARAMETROS POR
VALOR DE UNA FUNCION NUNCA
CAMBIAN EL VALOR DEL ARGUMENTO
ORIGINAL PASADO A LOS PARAMETROS.
O LOS PARAMETROS POR REFERENCIA (
DECLARADOS CON &) RECIBEN LA
DIRECCION DE LOS ARGUMENTOS
PASADOS Y
O EN UNA FUNCION, LAS ASIGNACIONES A
PARAMETROS POR REFERENCIA
CAMBIAN LOS VALORES DE LOS
ARGUMENTOS ORIGINALES.