Laura Sanchez Velazquez

7
Universidad Salazar Campus Pichucalco MATERIA: EXTRUCTURA DE DATOS 4 UNIDAD III ESTRUCTURAS 3 ER CUATRIMESTRE DE LA CARRERA DE LIA (SEMIESCOLARIZADO) NOMBRE DEL PROFR: LIC. LORENZO BASTARD MARTINEZ NOMBRE DE LA ALUMNA: Laura Sánchez Velázquez

description

ww

Transcript of Laura Sanchez Velazquez

Page 1: Laura Sanchez Velazquez

Universidad Salazar Campus Pichucalco

MATERIA: EXTRUCTURA DE DATOS 4

UNIDAD III ESTRUCTURAS

3 ER CUATRIMESTRE DE LA CARRERA DE LIA (SEMIESCOLARIZADO)

NOMBRE DEL PROFR: LIC. LORENZO BASTARD MARTINEZ

NOMBRE DE LA ALUMNA:

Laura Sánchez Velázquez

PICHUCALCO, CHIAPAS A 25 DE JULIO DE 2015

Page 2: Laura Sanchez Velazquez

Introducción

Este trabajo trata de punteros ya que es ciencias de la computación, un puntero es un objeto del lenguaje de programación, cuyo valor se refiere a (o "apunta a") otro valor almacenado en otra parte de la memoria del ordenador utilizando su dirección. Un puntero referencia a una ubicación en memoria, y a la obtención del valor almacenado en esa ubicación se la conoce como desreferenciación del puntero. A modo de analogía, un número de página en el índice de un libro podría considerarse un puntero a la página correspondiente; des referenciar un puntero sería como voltear a la página con el número de página determinada. De esto tratara el tema sobre los punteros y sus tipos ¡Que tengas éxitos

Puntero (Informática)

Page 3: Laura Sanchez Velazquez

Considero que las sentencias de asignación y variables puntero están entre los tesoros más valiosos de la informática

—Donald Knuth, Structured Programming with go to Statements.

En ciencias de la computación, un puntero es un objeto del lenguaje de programación, cuyo valor se refiere a (o "apunta a") otro valor almacenado en otra parte de la memoria del ordenador utilizando su dirección. Un puntero referencia a una ubicación en memoria, y a la obtención del valor almacenado en esa ubicación se la conoce como desreferenciación del puntero. A modo de analogía, un número de página en el índice de un libro podría considerarse un puntero a la página correspondiente; des referenciar un puntero sería como voltear a la página con el número de página determinada.

[ Memoria ] | · |

Page 4: Laura Sanchez Velazquez

| · | | · |+---+ |---------|| p |---->| v |+---+ |---------| | · | | · | | · |

Los punteros a datos mejoran significativamente el rendimiento de las operaciones repetitivas tales como cadenas de desplazamiento, tablas de búsqueda, tablas de control y estructuras árbol. En particular, muchas veces es mucho más barato en tiempo y espacio copiar y des referenciar punteros que copiar y acceder a los datos a los cuales apunta el puntero.

Los punteros también se utilizan para mantener las direcciones de los puntos de entrada para las subrutinas para llamadas en programación por procedimientos y enlaces para vincular a las bibliotecas de enlace dinámico (DLL) en tiempo de ejecución. En la programación orientada a objetos, los punteros a funciones se utilizan para métodos de unión, muchas veces utilizando lo que se llama tablas de métodos virtuales.

Un puntero es una implementación más concreta y simple del tipo de datos de referencia más abstracto. Varios lenguajes soportan algún tipo de puntero, aunque algunos tengan más restricciones en su uso que otros. Mientras que se utilice un "puntero" para referirse a referencias en general, se aplica más propiamente a las estructuras de datos cuya interfaz permita explícitamente que el puntero sea manipulado (aritméticamente vía aritmética de punteros) como una dirección de memoria, en oposición a una cookie u opción dónde esto no sea posible.[cita  requerida] Debido a que los punteros permiten tanto proteger como permitir el acceso a direcciones de memoria, hay riesgos asociados con su uso, sobre todo en este último caso. Generalmente, los punteros primitivas son almacenados en un formato similar a un entero; no obstante, intentar eliminar la referencia o "mirar hacia arriba" hacia un puntero cuyo valor no fue nunca una

Page 5: Laura Sanchez Velazquez

dirección de memoria válida conllevaría provocar que un programa se bloquee. Para aliviar este potencial problema, como una cuestión de seguridad de tipos, los punteros son considerados un tipo separado parame trizado por un tipo de datos que apuntan a, incluso si la representación subyacente es un número entero. También se pueden tomar otras medidas (como la validación y comprobación de los límites, para verificar el contenido de la variable de puntero contenga un valor que es a la vez una dirección de memoria válida y dentro del rango numérico que el procesador sea capaz de abordar).

Concepto

Un puntero es una variable que contiene la dirección de memoria de un dato o de otra variable que contiene al dato. Quiere esto decir, que el puntero apunta al espacio físico donde está el dato o la variable. Un puntero puede apuntar a un objeto de cualquier tipo, como por ejemplo, a una estructura o una función. Los punteros se pueden utilizar para referencia y manipular estructuras de datos, para referenciar bloques de memoria asignados dinámicamente y para proveer el paso de argumentos por referencias en las llamadas a funciones.

Muchas de las funciones estándares de C, trabajan con punteros, como es el caso del scanf o strcpy. Estas reciben o devuelve un valor que es un puntero. Por Ej. A scanf se le pasa la dirección de memoria del dato a leer (esto es un puntero)...

Char a;Scanf ("%c", &a);

&Punteros a cadenas de caracteres

Page 6: Laura Sanchez Velazquez

Ya hemos visto el uso que se le puede dar a un puntero como si de un array se tratase, entonces usando esta misma lógica podemos hacer un array de caracteres usando punteros.

Char *nombre="Gustavo A. Chavarría";//Es como un array de 20 caracteresprintf("%s",nombre);

Sin embargo al tratarse de una constante de caracteres no podemos modificarla luego de definir sus valores. Como por ejemplo no podemos remplazar un carácter, o leer un nuevo valor.

Gets (nombre); //ERROR en ejecución

Para poder modificar el valor de este puntero, este tendría que apuntar a una dirección que no sea una constante, como un array.

Char nombre []="Gustavo A. Chavarría"; //declaramos un array de caracteresChar *puntero=nombre; //Asignamos al puntero el comienzo del arrayPrintf ("%s \nIngrese otro nombre: ", puntero); //Escribimos en pantalla nombre...Gets (puntero); //leemos otro nombrePrintf ("%s", puntero); //escribimos el nuevo nombre...

Esta vez pudiste notar que si se pudo remplazar el valor del nombre, pero aun la cantidad de caracteres está limitada por el array original, más adelante veremos cómo solucionar esto con memoria dinámica.