Mindmap
Unidad 4
Inhalt der Mindmap
Unidad 4
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
- 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}
- ejemplo
- 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
- es
- 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
- El Operador de Dirección ( &) regresa la dirección de una variable
- 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.
- 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
- ejemplo
- Un apuntador que se puede modificar para que apunte a otro elemento pero dicho elemento no se puede modificar mediante el apuntador.
- es
- 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
- ejemplo
- 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.
- es
- 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.
- class libreria { int numLibros; public: friend void nuevoLibro(); }; void nuevoLibro() { t.numLibros ++; } libreria *ptrLibreriaNacional, libreria1
- ejemplo
- 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>
- 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; }
- ejemplo de un elemento menor en arreglo de 10 números
- 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.
- 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”;
- ejemplos
- < 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.
- Inicializa el apuntador con el entero. Esto es, en la dirección a la que apunta la variable punt se almacena el valor 123.
- 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
- operadores que manipulan los punteros
- 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
- las cuales son
- Existe un conjunto de operaciones definidas para punteros
- 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
- ejemplo
- 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);
- 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
- Apuntador constante a un dato no constante
- 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.
- son
Informationen
- Beschreibung
- Mindmap am Unidad 4, erstellt von Sara Ramírez am 16/05/2018.
- Erstellt von
- Sara Ramírez
- Aufrufe
- 2
- Bewertung