Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
PROGRAMACIÓN Y FUNDAMENTOS DE ALGORÍTMICA PUNTERO O APUNTADOR LOGRO DE LA SESIÓN Al finalizar la sesión el estudiante empleará punteros para solución de problemas básicos. 2 AGENDA Pseudocódigo Puntero Declaración Operadores Operaciones con punteros Punteros a punteros Gestión de memoria dinámica Operador new y delete Ejemplo 1 Ejemplo 2 Ejercicios 3 4 PUNTERO O APUNTADOR (POINTER) Un puntero es una variable que tiene la dirección de memoria de otra variable (la que contiene un valor). http://4.bp.blogspot.com/-L_oNj401oHE/TZ8hTp_MW6I/AAAAAAAAASs/j3F2Z8mYxpo/s1600/Direcci%C3%B3n.png PUNTERO O APUNTADOR (POINTER) Si una variable contiene la dirección de otra variable entonces se dice que: “la primera variable apunta a la segunda”. 5 El identificador cont hace referencia directa a la variable cuyo valor es 23. El identificador punt hace referencia indirecta a la variable (cont) cuyo valor es 23. http://3.bp.blogspot.com/-JiDg74OSVpE/TZ8ku8FiW-I/AAAAAAAAAS0/xG4CySq8mHU/s1600/Puntero.png 6 DECLARACIÓN Sintaxis : tipo *identificador Declara si una variable contiene una dirección de memoria. Donde tipo puede ser cualquier tipo base, y éste define a que tipo de variable puede apuntar el puntero. Ejemplo : Entero *punt, k Esta sentencia declara que punt apunta a un valor u objeto de tipo entero. Al declarar una variable como puntero, debe ir precedida por un *. Los punteros se deben inicializar a 0, NULL o a una dirección, al declararlos o mediante una asignación. OPERADORES & : Operador de dirección, devuelve la dirección de memoria de su operando (variable a la que precede). punt &cont Coloca la dirección de memoria 3500 de la variable cont en punt y la variable puntero punt está ubicada en la dirección 4000. Se lee que “punt recibe la dirección del valor cont” o “punt apunta a cont”. 7 OPERADORES * : Operador de indirección, es el complemento de &, devuelve el valor de la variable situada en la dirección que sigue (sinónimo de la variable hacia el que apunta su operando). valt *punt Si punt contiene la dirección de memoria de la variable cont, entonces coloca el valor de cont en valt. Se lee como “valt recibe el valor contenido en la variable apuntada por punt” (en ejemplo anterior es cont). 8 OPERACIONES CON PUNTEROS Se pueden incrementar o disminuir punteros. Por ejemplo: si y es puntero a un Real con la dirección actual 3500. Después de la expresión: yy+1, la dirección de y será 3504 y no 3501. Cada vez que se incrementa y, la computadora apuntará al siguiente flotante, que usa cuatro bytes. 9 http://2.bp.blogspot.com/-tVaHwA8aO9E/TZ8oEM5e6tI/AAAAAAAAAS8/eis2MMXCsd8/s1600/Variable.bmp OPERACIONES CON PUNTEROS Se puede usar un puntero en la parte derecha de una sentencia de asignación para asignar el valor del puntero a otro puntero. Ejemplo: Entero t, *x, *y t 450 x &t y x No se puede multiplicar o dividir punteros, no se puede sumar o restar dos punteros y no se puede sumar o restar los tipos reales a punteros. 10 PUNTEROS A PUNTEROS Sintaxis : tipo **identificador Declara un puntero a un puntero, es decir efectúa un direccionamiento indirecto múltiple o una cadena de punteros. Ejemplo : Real **dobleDir Esta declaración le dice al compilador que dobleDir es un puntero a un puntero tipo Real, y que no es un puntero a un número en punto flotante. 11 GESTIÓN DE MEMORIA DINÁMICA Hay ocasiones en las que no sabemos cuánta memoria vamos a necesitar hasta que no se ejecuta el programa. Los lenguajes (C++) permiten poder reservar memoria según se va necesitando, es decir, en tiempo de ejecución. Ventaja de utilizar memoria dinámica: Los programas aprovecharán mejor la memoria del ordenador en el que se ejecuten, usando sólo lo necesario. 12 OPERADOR NEW Por ejemplo en C++ hay 2 operadores para la gestión de memoria: new permite reservar memoria cuando se requiere y devuelve la dirección de inicio. identificadorPuntero new tipo En C++ identificadorPuntero = new tipo; Entero *pNULL int *p=NULL; pnew Entero p=new int; . 13 OPERADOR DELETE delete permite liberar memoria si ya no se necesita. delete identificadorPuntero En C++ delete identificadorPuntero; Entero *pNULL int *p=NULL; pnew Entero p=new int; delete p delete p; 14 EJEMPLO 1 Entero nota Entero *p leer(nota) p¬a escribir(*p) 15 EJEMPLO 2 Entero *p pnew Entero leer(*p) escribir(*p) delete p 16 PREGUNTAS 17 18 EJERCICIOS Escriba pseudocódigo que permita ingresar 2 números, luego debe sumarlos y finalmente mostrarlos. Desarrolle la solución de dos formas Usando punteros y variables Usando new y delete RESÚMEN Un puntero es una variable que puede almacenar una dirección de memoria. El operador de dirección &, se utiliza para obtener la dirección de memoria de una variable. El símbolo * se utiliza para declarar una variable de tipo puntero. El operador de indirección * se utiliza para acceder al valor apuntado por un puntero. Se llama de indirección, porque se accede de manera indirecta al valor almacenado en una dirección de memoria. Para gestionar memoria de forma dinámica se usará new y delete. 19
Compartir