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

Apuntadores en C y C++


Enviado por   •  16 de Septiembre de 2017  •  Documentos de Investigación  •  2.454 Palabras (10 Páginas)  •  169 Visitas

Página 1 de 10

Apuntadores en C y C++

Universidad de Carabobo

Facultad Experimental de Ciencias y Tecnolog´ıa

Prof. Marcos A. Gil T.

8 de diciembre de 2004

1. Introducci´on

Los apuntadores en C y C++ son una herramienta muy potente de programaci´on que suele causar mucha

confusi´on en los estudiantes que la est´an aprendiendo. Adem´as, cuando los programadores cometen un error

en su utilizaci´on, 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´as

eficientes y m´as flexibles. En en este art´ıculo se explica de una manera sencilla y breve todo lo referente a la

utilizaci´on 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´odigo que son aplicables a C aparecen instrucciones de

entrada y salida de las librer´ıas est´andar de C++.

2. 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´on de memoria desde donde comienzan los datos de esa variable. Las direcciones de memoria

se suelen describir como n´umeros en hexadecimal.

Un apuntador es una variable cuyo valor es la direcci´on de memoria de otra variable. Se dice que un

apuntador “apunta” a la variable cuyo valor se almacena a partir de la direcci´on de memoria que contiene el

apuntador. Por ejemplo, si un apuntador p almacena la direcci´on de una variable x, se dice que “p apunta a

x”.

3. Referenciaci´on

La referenciaci´on es la obtenci´on de la direcci´on 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´on. N´otese que se trata de un operador

unario. Ejemplo:

C´odigo C y C++

int x = 25;

cout << "La direcci´on de x es: " << &x << endl;

Este c´odigo imprime un valor del estilo “0x4fffd34”. Este valor puede variar durante cada ejecuci´on del

programa, debido a que el programa puede reservar distintos espacios de memoria durante cada ejecuci´on.


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:

*

A continuaci´on se muestran varios ejemplos:

C´odigo 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´on (‘&’) o

direcciones almacenadas en otros apuntadores. Ejemplos:

C´odigo C y C++

int i = 5;

int *p, *q;

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. Desreferenciaci´on 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´on del valor. N´otese que se trata de un operador unario. Ejemplos:

C´odigo C y C++

int x = 17, y;

int *p;

p = &x;

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

y = *p + 3; // A ’y’ se le asigna 20

C++ adem´as provee el operador binario ‘->’, utilizado para obtener campos de un registro con un apunta-

dor al mismo de una manera m´as f´acil y legible. Muchos compiladores de C tambi´en soportan este operador.

Ejemplo:

2


C´odigo C++

struct Data

{

char nombre[20];

int edad;

};

Data d;

Data *pd = &d;

(*pd).edad = 23; // Acceso al campo ’edad’ utilizando el operador ’.’

pd->edad = 23; // Acceso al campo ’edad’ utilizando el operador ’->’

7. Verificaci´on de tipos en apuntadores

Al igual que el resto de las variables, los apuntadores se enlazan a tipos de datos espec´ıficos (apuntadores

a variables de cierto tipo), de manera que a un apuntador s´olo se le pueden asignar direcciones de variables

del tipo especificado en la declaraci´on del apuntador. Ejemplo:

C´odigo C y C++

int *p1;

float *p2;

int x;

p1 = &x; // Esto es v´alido

p2 = &x; // Esto no es v´alido (el compilador genera un error)

8. Direcciones inv´alidas y la direcci´on NULL

Normalmente, un apuntador inicializado adecuadamente apunta a alguna posici´on espec´ıfica de la memo-

ria. Sin embargo, algunas veces es posible que un apuntador no contenga una direcci´on v´alida, en cuyo caso

es incorrecto desreferenciarlo (obtener el valor al que apunta) porque el programa tendr´a un comportamiento

impredecible y probablemente err´oneo, aunque es posible que funcione bien. Un apuntador puede contener

una direcci´on inv´alida debido a dos razones:

1. Cuando un apuntador se declara, al igual que cualquier otra variable, el mismo posee un valor cualquiera

que no se puede conocer con antelaci´on, hasta que se inicialice con alg´un valor (direcci´on). Ejemplo:

...

Descargar como (para miembros actualizados)  txt (16.9 Kb)   pdf (156.8 Kb)   docx (22.6 Kb)  
Leer 9 páginas más »
Disponible sólo en Clubensayos.com