Skip to content

Proyecto donde se explica y analiza el uso de punteros en el lenguaje de programación C. Proyecto con fines educativos.

License

Notifications You must be signed in to change notification settings

dbcolmenaresp/apuntadoresenCplusplus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Apuntadores en C

Puntero

Punteros

Los apuntadores (tambien conocidos como punteros) son una de las más poderosas características del lenguaje de programación C, además es una de las mas difíciles de manejar.
Los apuntadores brindan la posibilidad de crear y manipular estructuras de datos dinámicas, aquellas que pueden crecer y reducirse, tales como listas enlazadas, pilas, colas y árboles, ademas de tener una estrecha relacion con los arreglos y las cadenas de caracteres o string.
Los apuntadores contienen direcciones de memoria como sus valores.
Generalmente una variable contiene un valor específico.
Un apuntador contiene la dirección de memoria de una variable que contiene un valor específico.
En este sentido, una variable se refiere directamente a un valor y un apuntador se refiere a un valor indirectamente.
El hecho de referirse a un valor especifico a través de un apuntador sin hacer referencia a la variable que lo contiene, es llamado indirección.

Los apuntadores, al igual que otras variables, deben ser declarados antes de ser usados.

int *countPtr;  // Se declara un apuntador a una variable con valor entero
int count;      // Se declara una variable con valor entero
count = 7;      // Se asigna un valor entero a la variable entera count

Declara la variable *countPtr como un apuntdor a una variable de tipo entero, además la variable count es declarada para ser una variable de tipo entero.

Toda variable que sea declarada como un apuntador debe estar precedida por el simbolo asterisco (*).

Al declarar y asignar los valores correspondientes, la estructura de datos queda como se indica a continuacion:

count count referencia directamente una variable cuyo valor es 7.
7

*countPtr count *countPtr referencia indirectamente una variable cuyo valor es 7

--------> 7

La siguiente declaracion de variables:

double *xPtr, *yPtr;

Indica que ambas variables, *xPtr* y *yPtr* son apuntadores a valores de tipo double.

Los apuntadores pueden ser declarados para apuntar a objetos de cualquier tipo de datos.

Los apuntadores deben ser inicializados cada vez que se declaran o en una sentencia de asignacion. Un apuntador con el valor 0 (cero) o NULL apunta a ningun lado, en C++ se usa preferentemente el valor 0 (cero). La constante simbolica NULL es definida en el archivo de cabecera iostream. Cuando se asigna 0 a un apuntador, este se convierte a un apuntador del tipo apropiado. El valor de 0 es el unico valor entero que puede ser asignado a un apuntador sin hacer casting de entero a apuntador primero. Se debe preceder el simbolo asterisco (*) a todas las variables de tipo apuntador, aunque se declaren en una misma linea separada por comas. Se debe inicializar los apuntadores para evita que apunten a zonas desconocidas de memoria.

Utilizando los apuntadores:

El operador unario & es llamado el operador de direccion y devuelve la direccion de un operando.

Por ejemplo, a continuacion se cedlara una variable entera y un apuntador a entero.

int y = 5;  
int *yPtr;

La siguiente sentencia asigna la direccion de la variable y al apuntador yPtr

yPtr = &y;

Luego de la ejecucion de esta sentencia se dice que el apuntador yPtr apunta a la direccion de la variable y.

A continuacion se muestra una representacion esquemática de la memoria despues de la asignacion anterior:

yPtr y
--------> 5

En la figura se mestra la relacion del apuntador a través de una flecha del apuntador hacia el objetivo que este apuntando.

La siguiente figura muestra la representacion del puntero en memoria, asumiendo que la variable entera y este almacenada en la dirección de memoria 6000 y la variable de tipo apuntador yPtr esta almacenada en la direccion 5000.

El opreador de dirección solo puede ser aplicado a un elemento que tenga un valor asignado directamente, tal como el nombre de una variable. El operador de direccion no puede ser aplicado a constantes o expresiones

 | *yPtr*           

5000 | 6000

 | *y*

6000 | 5

El operador asterisco (*) comunmente conocido como operador de indireccion, devuelve un alias del elemento al cual apunta, por ejemplo la siguiente sentencia:

cout  <<  *yPtr << endl;

Muestra el valor de la variable y, el numero entero 5, similas a como lo haria la siguiente sentencia:

*yPtr;  
cin >>*yPtr;

Codificacion del uso de apuntadores

A continuacion se muestra un programa que opera con apuntadores en lenguaje C++:

Primeramente se importa el archivo de cabecera necesario para usar las sentencias de entrada y salida de informacion

#include <iostream>  
using std::cout;  
using std::endl;

Luego se define el inicio de la funcion principal:

int main()

A continuacion se declaran variables a usar

ìnt a;     //a es una variable de tipo entero  
int *aPtr; //aPtr es un apuntador a un entero

Se asignan los valores correspondientes a las variables declaradas:

a = 7;    //se le asigna a la variable a el valor entero 7  
aPtr = &a; //al apuntador aPtr se le asigna la direccion de la variable a

A continuacion se muestran en pantalla los valores asignados a las diferentes variables:

Se muestra en pantalla el valor de la direccion de la variable entera a

cout <<  "La direccion de la variable a es " << &a << endl;

Se muestra en pantalla el valor que contiene el aputnador aPtr

cout <<  "El valor de aPtr es " << aPtr << endl;

Se muestra en pantalla el valor de la variable a

cout <<  "El valor de la variable a es " << a << endl;

Se muestra en pantalla el valor apuntado indirectamene por *aPtr

cout <<  "El valor de *aPtr es " << *aPtr << endl;

Los operadores de direccion & y de apuntador * son operadores inversos

cout <<  "&*aPtr = " << &*aPtr << endl;  
cout <<  "*&aPtr = " << *&aPtr << endl;

Note que al ejecutar el codigo indicado, el valor de la direccion de la variable entera a es identico al valor contenido en la varialbe *aPtr. Los operadores & (operador de direccion) y * (operador de apuntador) son operadores inversos, por lo tanto aplicarlos en cualquier orden genera el mismo resultado.

Referencias

Como programar C++ Deitel
https://drive.google.com/open?id=1yWPwF7v5D2_9G9QRtwKMFubM9iE5g-cq

Apuntadores. Definición. Disponible en:
http://www.utm.mx/~mgarcia/PE7(Apuntadores).pdf

Apuntadores en C y C++. Disponible en:
https://utch2009.files.wordpress.com/2010/04/apuntadores.pdf

Jensen, T. Tutorial sobre apuntadores y arreglos en C. https://drive.google.com/open?id=1LPeIGP9bmaJnMOj5L0NIqBVP5zn7sVI-

Introducción a punteros. Video disponible en:
Video de Introducción a punteros

Como usar correctamente los apuntadores. Video disponible en:
Video Como usar correctamente los apuntadores

Manejo de punteros en C. Video disponible en:
Manejo de punteros en C

About

Proyecto donde se explica y analiza el uso de punteros en el lenguaje de programación C. Proyecto con fines educativos.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages