Punteros y memoria

Solo disponible en BuenasTareas
  • Páginas : 8 (1887 palabras )
  • Descarga(s) : 0
  • Publicado : 23 de febrero de 2012
Leer documento completo
Vista previa del texto
Instituto Tecnológico de Costa Rica
Escuela de ingeniería en Computación

Algoritmos y estructuras de datos II

Resumen 2

Apuntadores y memoria en C y C++

Kenneth Mora Mora

Prof. Gerardo Nereo Campos Araya

Año 2012

Definición de apuntador
Un apuntador es una variable cuyo valor es la dirección de memoria de otra variable. Se dice que un
Apuntador “apunta” a la variable cuyovalor se almacena a partir de la dirección de memoria que contiene el apuntador.

Referenciacion
La referenciacion es la obtención de la dirección de una variable. En C y C++ esto se hace a través del
Operador ‘&’, aplicado a la variable a la cual se desea saber su dirección.

int x = 25;
cout << "La dirección de x es: " << &x << endl;
Declaración de apuntadoresPara declarar un apuntador se especifica el tipo de dato al que apunta, el operador ‘*’, y el nombre del
Apuntador. La sintaxis es la siguiente:
int *ptr1; // Apuntador a un dato de tipo entero (int)
Asignación de apuntadores
Se pueden asignar a un apuntador direcciones de variables a través del operador de referenciacion (‘&’) o
Direcciones almacenadas en otros apuntadores.

int i =5;
int *p, *q;
p = &i; // Se le asigna a ’p’ la direccion de ’i’
q = p; // Se le asigna a ’q’ la direccion almacenada en ’p’ (la misma de ’i’)
Desreferenciacion de apuntadores
La desreferenciacion es la obtención del valor almacenado en el espacio de memoria donde apunta un apuntador.

int x = 17, y;
int *p;
p = &x;
cout << "El valor de x es: " << *p<< endl; // Imprime 17
y = *p + 3; // A ’y’ se le asigna 20

Verificación de tipos en apuntadores
Los apuntadores se enlazan a tipos de datos específicos (apuntadores a variables de cierto tipo), de manera que a un apuntador solo se le pueden asignar direcciones de variables del tipo especificado en la declaración del apuntador.

Direcciones inválidasy la direccion NULL
Un apuntador puede contener una direccion invalida debido a dos razones, que cuando un apuntador se declara, al igual que cualquier otra variable, el mismo posee un valor cualquiera que no se puede conocer con antelación, hasta que se inicialice con algún valor o después de que un apuntador ha sido inicializado, la direccion que posee puede dejar de ser valida si se libera lamemoria reservada en esa direccion, por lo que si se intenta desreferenciar un apuntador que contiene una direccion invalida pueden ocurrir cosas como:

1) Se obtiene un valor incorrecto en una o más variables debido a que no fue debidamente inicializada la zona de memoria que se accede a través de la direccion en cuestión.
2) Existe el riesgo de sobrescribir datos de otras variables.3) Existe la posibilidad de que la direccion este fuera de la zona de memoria utilizada para almacenar datos y más bien este, por ejemplo, en la zona donde se almacenan las instrucciones del programa.

Cuando no se desea que un apuntador apunte a algo, se le suele asignar el valor NULL, en cuyo caso se dice que el apuntador es nulo. Un apuntador nulo se utiliza para proporcionar a un programaun medio de conocer cuando un apuntador contiene una direccion valida.

Apuntadores a apuntadores

Dado que un apuntador es una variable que apunta a otra, fácilmente se puede deducir que pueden existir apuntadores a apuntadores, y a su vez los segundos pueden apuntar a apuntadores, y así sucesivamente.

char c = ’z’;
char *pc = &c;
char **ppc = &pc;

Apuntadores constantes yapuntadores a constantes
Es posible declarar apuntadores constantes. De esta manera, no se permite la modificación de la direccion almacenada en el apuntador, pero sı se permite la modificación del valor al que apunta.

int x = 5, y = 7;
int *const p = &x; // Declaración e inicialización del apuntador constante
*p = 3; // Esto es valido
p = &y; //...
tracking img