• Like
Apunfun1
Upcoming SlideShare
Loading in...5
×
Uploaded on

 

More in: Technology , Sports
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,466
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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<<"n";
    std::cout<<"El contenido de B_int es:"<<B_int<<"n";
    direccion_int = &A_int;
    Temp_int = *direccion_int;
    *direccion_int = B_int;
    B_int = Temp_int;
    cout<<"Despues del intercambio:"<<"nn";
    cout<<"El contenido de A_int es:"<<A_int<<"n";
    cout<<"El contenido de B_int es:"<<B_int<<"n";
    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:n"<<&a<<endl;
    cout<<"el valor de apuntador es:n"<<apuntador<<endl;
    cout<<"el valor de a es:n"<<a<<endl;
    cout<<"el valor de apuntador es:n"<<*apuntador<<endl;
    cout<<"uso de * y &n";
    cout<<*&apuntador;cout<<"n";
    cout<<&*apuntador;cout<<"n";
    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:n"<<numero;
    cubo(&numero);
    cout<<"n";
    cout<<"el nuevo valor de numero es:n"<<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:n"<<&apuntador;
    cout<<"n el valor de numero es:n"<<numero;
    cout<<"n";
    cubo(&numero);
    cout<<"el nuevo valor de numero es:n"<<numero;
    cout<<"nla direccion nueva de numero es:n"<<&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.