Programacion

Solo disponible en BuenasTareas
  • Páginas : 6 (1322 palabras )
  • Descarga(s) : 0
  • Publicado : 22 de agosto de 2012
Leer documento completo
Vista previa del texto
ESTRUCTURA DE DATOS
Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo

DATOS ESTÁTICOS
Su tamaño y forma es constante durante la ejecución de un programa y por tanto se determinan en tiempo de compilación. El ejemplo típico son los arrays. Tienen el problema de que hay que dimensionar la estructura de antemano, lo que puedeconllevar desperdicio o falta de memoria.

DATOS DINÁMICOS
Su tamaño y forma es variable (o puede serlo) a lo largo de un programa, por lo que se crean y destruyen en tiempo de ejecución. Esto permite dimensionar la estructura de datos de una forma precisa: se va asignando memoria en tiempo de ejecución según se va necesitando.

TIPO PUNTERO
Las variables de tipo puntero son las que nospermiten referenciar datos dinámicos.

Tenemos que diferenciar claramente entre:
1. La variable referencia o apuntadora, de tipo puntero. 2. La variable anónima referenciada o apuntada, de cualquier tipo, tipo que estará asociado siempre al puntero. Físicamente, un puntero no es mas que una dirección de memoria.

En el siguiente ejemplo se muestra el contenido de la memoria con un puntero queapunta a la dirección 78AC(16, la cual contiene 6677(16:

DECLARACIÓN DE PUNTEROS
Definiremos un tipo puntero con el carácter asterisco (*) y especificando siempre el tipo de la variable referenciada. Ejemplo: Typedef int PtrInt p; *PtrInt; // puntero a enteros

// puntero a enteros

O bien directamente: int *p; // puntero a enteros

Cuando p este apuntando a un entero de valor -13,gráficamente lo representaremos así:

Para acceder a la variable apuntada hay que hacerlo a través de la variable puntero, ya que aquella no tiene nombre (por eso es anónima).
La forma de denotarla es *p. En el ejemplo *p = -13 p = dirección de memoria de la celda con el valor -13, dirección que no necesitamos tratar directamente.

EJEMPLO DE PUNTEROS A ESTRUCTURAS
struct TipoRegistro { int num;char car; }; typedef TipoRegistro *TipoPuntero; TipoPuntero p; Así: p es la dirección de un registro con dos campos (tipo puntero) *p es un registro con dos campos (tipo registro) p->num es una variable simple (tipo entero) p->car es una variable simple (tipo carácter) Para inicializar una variable de tipo puntero, le asignaremos la macro NULL (p = NULL)

GESTIÓN DE LA MEMORIA DINÁMICA
Cuandodeclaramos una variable de tipo puntero, por ejemplo int *p; estamos creando la variable p, y se le reservara memoria estatica- en tiempo de compilación; pero la variable referenciada o anónima no se crea. En este momento tenemos:

La variable anónima debemos crearla después mediante una llamada a un procedimiento de asignación de memoria -dinámica- predefinido.

¿CÓMO SE RESERVA MEMORIADINÁMICAMENTE?
El lenguaje C dispone de una serie de librerías de funciones estándar. El fichero de cabeceras stdlib.h contiene las declaraciones de dos funciones que nos permiten reservar memoria, así como otra función que nos permite liberarla.

Reserva de memoria Las dos funciones que nos permiten reservar memoria son:
malloc (cantidad_de_memoria); calloc (número_de_elementos,tamaño_de_cada_elemento);

Estas dos funciones reservan la memoria especificada y nos devuelven un puntero a la zona en cuestión. Si no se ha podido reservar el tamaño de la memoria especificado devuelve un puntero con el valor 0 o NULL.
Antes de indicar como deben utilizarse las susodichas funciones tenemos que comentar el operador sizeof. Este operador es imprescindible a la hora de realizar programasportables, es decir, programas que puedan ejecutarse en cualquier máquina que disponga de un compilador de C.

El operador sizeof(tipo_de_dato), nos devuelve el tamaño que ocupa en memoria un cierto tipo de dato, de esta manera, podemos escribir programas independientes del tamaño de los datos y de la longitud de palabra de la máquina. En resumen si no utilizamos este operador en conjunción con las...
tracking img