ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Punteros

slan1992Informe26 de Abril de 2015

490 Palabras (2 Páginas)160 Visitas

Página 1 de 2

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;

...

ptri = &a;

ptrf = &x;

ptrf = ptri; // ERROR

Utilizar punteros no inicializados

char *ptr;

*ptr = ‘a’; // ERROR

Asignar valores a un puntero y no a la variable a la que apunta

int n;

int *ptr = &n;

ptr = 9; // ERROR

Intentar asignarle un valor al dato apuntado por un puntero cuando éste es NULL

int *ptr = NULL;

*ptr = 9; // ERROR

Punteros a punteros

Un puntero a puntero es…

un puntero que contiene la dirección de memoria de otro punteroint

main ()

{

int a = 5;

int *p; // Puntero a entero

int **q; // Puntero a puntero

p = &a;

q = &p;

}

Para acceder al valor de la variable a podemos escribir

a (forma habitual)

*p (a través del puntero p)

**q (a través del puntero a puntero q)

q contiene la dirección de p, que

...

Descargar como (para miembros actualizados) txt (3 Kb)
Leer 1 página más »
Disponible sólo en Clubensayos.com