Punteros

Páginas: 7 (1680 palabras) Publicado: 11 de octubre de 2011
Definición de punteros
Para definir una variable puntero de un determinado tipo se sigue una sintaxis parecida a la usada para definir variables normales sólo que al nombre del tipo se le postpone un símbolo de asterisco (*) O sea, un puntero se define así:

* ;
Por ejemplo, una variable puntero llamada a que pueda almacenar referencias a posiciones de memoria donde se almacenenobjetos de tipo int se declara así:

int * a;
En caso de quererse declarar una tabla de punteros, entonces el asterisco hay que incluirlo tras el nombre del tipo pero antes de los corchetes. Por ejemplo, una tabla de nombre t que pueda almacenar punteros a objetos de tipo int se declara así:

int*[] t;
Hay un tipo especial de puntero que es capaz de almacenar referencias a objetos decualquier tipo. Éstos punteros se declaran indicando void como . Por ejemplo:

void * punteroACualquierCosa;
Hay que tener en cuenta que en realidad lo que indica el tipo que se dé a un puntero es cuál es el tipo de objetos que se ha de considerar que se almacenan en la dirección de memoria almacenada por el puntero. Si se le da el valor void lo que se está diciendo es que no se deseaque se considere que el puntero apunta a ningún tipo específico de objeto. Es decir, no se está dando información sobre el tipo apuntado.
Se pueden declarar múltiples variables locales de tipo puntero en una misma línea. En ese caso el asterisco sólo hay que incluirlo antes del nombre de la primera. Por ejemplo:

int * a, b; // a y b son de tipo int * No sería válido haberlas definido comoint *a, *b;
Hay que tener en cuenta que esta sintaxis especial para definir en una misma definición varios punteros de un mismo tipo sólo es válida en definiciones de variables locales. Al definir campos no sirve y hay que dar para cada campo una definición independiente.
El recolector de basura no tiene en cuenta los datos a los que se referencie con punteros, pues ha de conocer cuál esel objeto al referenciado por cada variable y un puntero en realidad no tiene porqué almacenar referencias a objetos de ningún tipo en concreto. Por ejemplo, pueden tenerse punteros int * que en realidad apunten a objeto char, o punteros void * que no almacenen información sobre el tipo de objeto al que debería considerarse que apuntan, o punteros que apunte a direcciones donde no hayan objetos,etc.
Como el recolector de basura no trabaja con punteros, no es posible definir punteros de tipos que se almacenen en memoria dinámica o contengan miembros que se almacenen en memoria dinámica, ya que entonces podría ocurrir que un objeto sólo referenciado a través de punteros sea destruido por considerar el recolector que nadie le referenciaba. Por ello, sólo es válido definir punteros detipos cuyos objetos se puedan almacenar completamente en pila, pues la vida de estos objetos no está controlada por el recolector de basura sino que se destruyen cuando se abandona el ámbito donde fueron definidos.
En concreto, los únicos punteros válidos son aquellos que apunten a tipos valor básicos, enumeraciones o estructuras que no contengan campos de tipos referencias. También puedendefinirse punteros a tipos puntero, como se muestra en el siguiente ejemplo de declaración de un puntero a punteros de tipo int llamando punteroApunteros:

int ** punteroApunteros;
Obviamente la anidación puede hacerse a cualquier nivel de profundidad, pudiéndose definir punteros a punteros a punteros, o punteros a punteros a punteros a punteros, etc.

Ejemplos de punteros:

Ejemplo depuntero que no apunta al tipo correcto:
El tipo base del puntero determina el tipo de datos al que apunta el
puntero y por tanto es el que le indica al compilador cuantos bytes debe
transferir para cualquier asignación que usa un puntero. Como podemos
asignar cualquier dirección a un puntero, no se produce error cuando
asignamos a un puntero, la dirección de una variable de un tipo...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Punteros
  • Puntero
  • Punteros
  • Punteros
  • Punteros
  • Punteros
  • Los Punteros Laser
  • el puntero

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS