GoConqr has a new look! Let us know what you think.

Mind map

Unidad 4

Sara Ramírez Spanish

Map content

Unidad 4

  1. Apuntadores

    • son
      • Variables que contienen una dirección de memoria, la cual corresponderá a un dato o a una variable que contiene el dato; Cada variable que se utiliza en una aplicación ocupa una o varias posiciones de memoria. Estas posiciones de memoria se accesan por medio de una dirección.
        • Apuntador constante a un dato no constante
          • es
            • Un apuntador el cual apunta siempre a la misma dirección de memoria, pero el dato que se encuentra en dicha dirección se puede modificar utilizando el apuntador
              • ejemplo
                • int main() { int x, y; // ptr es un apuntador constante a un int // que puede modificarse pero siempre apunta // a la misma dirección. int * const ptr = &x; // el apuntador constante se debe inicializar. *ptr = 7; // permitido: *ptr no es constante. ptr = &y; // error: ptr es constante}
                  • En el ejemplo anterior ejemplo se intenta modificar un apuntador constante y se produce un error de compilación
        • Operadores de dirección e indorección
          • El Operador de Dirección ( &) regresa la dirección de una variable
            • El Operador de Indirección ( * ), toma la dirección de una variable y regresa el dato que contiene esa dirección
        • Apuntador no constante a un dato constante
          • es
            • Un apuntador que se puede modificar para que apunte a otro elemento pero dicho elemento no se puede modificar mediante el apuntador.
              • ejemplo
                • void f( const int * ); int main() { int y; f( &y ); // f intenta una modificación ilegal. return 0; } // fin main // xPtr no puede modificar el valor de la variable a la cual apunta void f( const int *xPtr ) { *xPtr = 100; // error: no se puede modificar un objeto const. } // end function f
                  • En el anterior ejemplo la función f trata de hacer una modificación a un valor constante a través de su apuntador. Esto devolverá un error de compilación.
        • Apuntador no constante a un dato no constante
          • es
            • El proceso por el cual tanto el apuntador como el dato al que el apuntador hace referencia se pueden modificar. En este caso no se hace uso del calificador const.
              • ejemplo
                • #include <iostream> using std::cout; using std::endl; void conviertePositivo ( double * ); int main() { double numero[] = {-10,5,4,7,8}; conviertePositivo ( numero ); return 0; } // Convierte el vector a numeros positivos void conviertePositivo ( double *sPtr ) { while ( *sPtr != '\0' ) // ciclo hasta que se termine el vector 28 { if ( *sPtr < 0 ) // si el número es negativo, *sPtr = 0; // lo convierte a 0 sPtr++; // mueve sPtr a la siguiente cadena de caracteres } // fin while } // fin función
        • Declaración de los apuntadores
          • Para declarar un apuntador se especifica el tipo de dato al que apunta, el operador ‘*’, y el nombre del apuntador. La sintaxis es la siguiente: <tipo de dato apuntado> *<indentificador del apuntador>
            • ejemplo
              • class libreria { int numLibros; public: friend void nuevoLibro(); }; void nuevoLibro() { t.numLibros ++; } libreria *ptrLibreriaNacional, libreria1
                • En este ejemplo primero declara una clase de tipo libreria y posteriormente se declara un apuntador prtLibreriaNacional que apuntara a un objeto de tipo libreria. Adicionalmente, se declara un objeto libreria1 que no es un apuntador sino un objeto de tipo libreria.
        • Expresiones con punteros
          • Los apuntadores son operandos validos en expresiones aritmeticas, las expresiones de asignacion y las expresiones de comparacion. Sin embargo, no todos los operadores que se utilizan normalmente en estas expresiones son validos con variables de apuntador.
            • ejemplo de un elemento menor en arreglo de 10 números
              • # include <iostream> using namespace std; void main ( ) { int vec[10], menor (int *a, int n); cout << "Introduzca 10 enteros: \n"; for (int i=0;i<10;i++) cin>>vec[i]; cout<<"El valor minimo es" <<menor(vec,10)<<endl; } int menor (int *a, int n) { int peque; peque=*a; for (int i=1;i<n;i++) if (*(a+1)<peque) peque=*(a+i); return peque; }
        • Inicialización de los apuntadores
          • Inicializa el apuntador con el entero. Esto es, en la dirección a la que apunta la variable punt se almacena el valor 123.
            • < Almacenamiento > < Tipo > * < Nombre > = < Expresión > Si <Almacenamiento> es extern o static, <Expresión> deberá ser una expresión constante del tipo <Tipo> expresado. Si <Almacenamiento> es auto, entonces <Expresión> puede ser cualquier expresión del <Tipo> especificado.
              • ejemplos
                • La constante entera 0, NULL (cero) proporciona un apuntador nulo a cualquier tipo de dato: int *p; p = NULL; //actualización El nombre de un arreglo de almacenamiento static o extern se transforma según la expresión: a) float mat[12]; float *punt = mat; b) float mat[12]; float *punt = &mat[0]; Un “cast” apuntador a apuntador: int *punt = (int *) 123.456; Inicializa el apuntador con el entero. Esto es, en la dirección a la que apunta la variable punt se almacena el valor 123. Un apuntador a carácter puede inicializarse en la forma: char *cadena = Esto es una cadena”;
        • Operaciones con apuntadores
          • Existe un conjunto de operaciones definidas para punteros
            • las cuales son
              • La suma o resta de un entero produce una nueva localización de memoria. Se pueden comparar punteros, utilizando expresiones lógicas, para ver si están apuntando o no a la misma dirección de memoria. La resta de dos punteros da como resultado el número de variables entre las dos direcciones
                • operadores que manipulan los punteros
                  • Operador Acción *p Contenido &x Puntero a un objeto p[i] Elemento de un vector p->m Selección de miembros de una clase ++p Preincremento al siguiente elemento p++ Postincremento al siguiente elemento --p Predecremento al elemento anterior p-- Postdecremento al elemento anterior p += n Incremento en n elementos p -= n Decremento en n elementos p+n Offset en n elementos p-n Offset en n elementos new T Reserva de memoria para el objeto T new T[n] Reserva memoria para un vector de n objetos de tipo T delete p Libera la memoria reservada para p delete [] p Libera la memoria reservada para un vector de objetos
        • Paso de parametros por referencia
          • El paso por referencia permite pasar una variable a una función y devolver los cambios que la función ha hecho al programa principal. El mismo efecto se consigue pasando un apuntador a la función
            • se puede indicar al compilador que genere automáticamente un llamado por referencia en lugar de un llamado por valor para uno o mas parámetros, esto se hace utilizando la siguiente sintaxis tipo funcion(tipo & var);
              • ejemplo
                • #include <iostream> using std::cout; using std::endl; void hipotenusaCuadrado(double * ,double *); int main() { double catetoOpuesto = 5; double catetoAdyacente = 10; double hipotenusaCuadrado= 0; cout << "Lo longitud del cateto opuesto es " << catetoOpuesto; cout << "Lo longitud del cateto adyacente es " << catetoAdyacente; hipotenusaCuadrado = hc (& catetoOpuesto,& catetoAdyacente); // pasa la dirección de los catetos a la función cout << "\nLa hipotenusa al cuadrado es " << hipotenusaCuadrado << endl; return 0; } // fin main double hc ( double *coPtr, double *caPtr ) { double h = * coPtr * * coPtr + * caPtr * * caPtr ; // return h ; 25 } // fin de la función

Information

Description
Mind Map on Unidad 4, created by Sara Ramírez on 16/05/2018.
Created by
Sara Ramírez
Views
2
Rating

Feedback

What is it about?

What do you think of the new look?

How do you like it?