Análisis y Diseño de Algoritmos                                                                                                      

Prof: Ing. Victor Garro

Asistente: Marco Elizondo Vargas

 

Punteros

 

Introduccion a 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;

}

 

 

 

 

 

 

 

Free Web Hosting