Punteros
Enviado por slan1992 • 26 de Abril de 2015 • Informe • 490 Palabras (2 Páginas) • 146 Visitas
Punteros
Definición
Un puntero es un dato que contiene una dirección de memoria.
NOTA: Existe una dirección especial que se representa por medio de la
constante NULL (definida en <stdlib.h>) y se emplea cuando
queremos indicar que un puntero no apunta a ninguna dirección.
Declaración
<tipo> *<identificador>
<tipo>
Tipo de dato del objeto referenciado por el puntero
<identificador>
Identificador de la variable de tipo puntero.
Cuando se declara un puntero se reserva memoria para albergar una dirección de
memoria, pero NO PARA ALMACENAR EL DATO AL QUE APUNTA EL PUNTERO.
El espacio de memoria reservado para almacenar un puntero es el mismo
independientemente del tipo de dato al que apunte: el espacio que ocupa una
dirección de memoria.
char c = ’a’;
char *ptrc;
int *ptri;
Operaciones básicas con punteros
Dirección
Operador &
&<id> devuelve la dirección de memoria donde comienza la variable <id>.
El operador & se utiliza para asignar valores a datos de tipo puntero:
int i;
int *ptr;
...
ptr = &i;
Indirección
Operador *
*<ptr> devuelve el contenido del objeto referenciado por el puntero <ptr>.
El operador * se usa para acceder a los objetos a los que apunta un puntero:
char c;
char *ptr;
…
ptr = &c;
*ptr = ‘A’; // Equivale a escribir: c = ‘A’
Asignación
Operador =
A un puntero se le puede asignar una dirección de memoria concreta, la
dirección de una variable o el contenido de otro puntero.
Una dirección de memoria concreta:
int *ptr;
...
ptr = 0x1F3CE00A;
...
ptr = NULL;
La dirección de una variable del tipo al que apunta el puntero:
char c;
char *ptr;
...
ptr = &c;
Otro puntero del mismo tipo:
char c;
char *ptr1;
char *ptr2;
…
ptr1 = &c;
ptr2 = ptr1;
Como todas las variables, los punteros también contienen “basura” cuando se
declaran, por lo que es una buena costumbre inicializarlos con NULL.
Ejemplo
int main ()
{
int y = 5;
int z = 3;
int *nptr;
int *mptr;
nptr = &y;
z = *nptr;
*nptr = 7;
mptr = nptr;
mptr = *z;
*mptr = *nptr;
y = (*nptr) + 1;
return 0;
}
Errores comunes
Asignar punteros de distinto tipo
int a = 10;
int *ptri = NULL;
double x = 5.0;
double *ptrf = NULL;
...
...