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

Apuntadores Y Ejemplos


Enviado por   •  22 de Noviembre de 2014  •  3.994 Palabras (16 Páginas)  •  324 Visitas

Página 1 de 16

Introducción

Los apuntadores en C y C++ son una herramienta muy potente de programación que suele causar mucha confusión en los estudiantes que la están aprendiendo. Además, cuando los programadores cometen un error en su utilización, puede ser muy difícil encontrar el error, por lo cual es importante saber utilizarlos muy bien. El uso de apuntadores en C y C++ es muy importante debido a que permite hacer los programas más eficientes y más flexibles. En en este artículo se explica de una manera sencilla y breve todo lo referente a la utilización de apuntadores tanto en C como en C++.

Todo lo explicado en este artículo aplica tanto para C como para C++, a menos que se especifique un lenguaje en particular. En algunos ejemplos de código que son aplicables a C aparecen instrucciones de entrada y salida de las librer´ıas estándar de C++.

1. Definici´on de apuntador

Cuando se declara una variable, el compilador reserva un espacio de memoria para ella y asocia el nombre de ´esta a la dirección de memoria desde donde comienzan los datos de esa variable. Las direcciones de memoria se suelen describir como nu´meros en hexadecimal.

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 cuyo valor se almacena a partir de la dirección de memoria que contiene el apuntador. Por ejemplo, si un apuntador p almacena la dirección de una variable x, se dice que “p apunta a x ”.

2. Referenciación

La referenciación es la obtención de la dirección de una variable. En C y C++ esto se hace a trav´es del operador ‘&’, aplicado a la variable a la cual se desea saber su dirección. N´otese que se trata de un operador unario. Ejemplo:

int x = 25;

Código C y C++

cout << "La dirección de x es: " << &x << endl;

Este código imprime un valor del estilo “0x4fffd34”. Este valor puede variar durante cada ejecución del programa, debido a que el programa puede reservar distintos espacios de memoria durante cada ejecución.

3. Operaciones Básicas de Apuntadores

#define NULO ((void *)0)

void main()

{

int i=5, j; // Datos

int *p=NULO, *q=NULO; // Apuntadores

printf("\ni=%d, p=%p, q=%p", i, p, q);

p = q = &i; // Apuntar al dato

*p = 7; // ..afectar dato (indirección)

printf("\ni=%d, p=%p, q=%p", i, p, q);

if ( p == q ) // Son iguales?

printf("\np es igual a q");

++*p; // incrementa dato, lee dato

printf("\ni=%d",i); // i=8

j = *q++; // lee dato, incrementa dirección

printf("\nj=%d, p=%p, q=%p", j, p, q); // j=?

if ( p != q ) // Diferentes?

printf("\np es diferente a q");

if ( q > p ) // Cuál es mayor?

printf("\nq es mayor que p");

}

4. Declaraci´on de apuntadores

Para declarar un apuntador se especifica el tipo de dato al que apunta, el operador ‘*’, y el nombre del apuntador. La sintaxis es la siguiente:

<tipo de dato apuntado> *<indentificador del apuntador>

A continuación se muestran varios ejemplos:

Codigo C y C++

int *ptr1; // Apuntador a un dato de tipo entero (int)

char *cad1, *cad2; // Dos apuntadores a datos de tipo car´acter (char)

float *ptr2; // Apuntador a un dato de tipo punto-flotante (float)

5. Asignaci´on de apuntadores

Se pueden asignar a un apuntador direcciones de variables a trav´es del operador de referenciación (‘&’) o direcciones almacenadas en otros apuntadores. Ejemplos:

int i = 5;

int *p, *q;

Codigo C y C++

p = &i; // Se le asigna a ’p’ la direcci´on de ’i’

q = p; // Se le asigna a ’q’ la direcci´on almacenada en ’p’ (la misma de ’i’)

6. Des referenciación de apuntadores

La desreferenciaci´on es la obtenci´on del valor almacenado en el espacio de memoria donde apunta un apuntador. En C y C++ esto se hace a trav´es del operador ‘*’, aplicado al apuntador que contiene la dirección del valor. Nótese que se trata de un operador unario. Ejemplos:

int x = 17, y;

int *p;

Codigo C y C++

p = &x;

cout << "El valor de x es: " << *p << endl; // Imprime 17 y

...

Descargar como (para miembros actualizados)  txt (20.5 Kb)  
Leer 15 páginas más »
Disponible sólo en Clubensayos.com