top of page

Punteros

cursor.png

Los punteros permiten simular el paso por referencia, crear y manipular estructuras dinamicas de datos, tales como listas enlazadas, pilas, colas y árboles. Generalmente las variables contienen valores especificos. Los punteros son variables pero en vez de contener un valor especifico, contienen las direcciones de las variables a las que apuntan. Para obtener o modificar el valor de la variable a la que apuntan se utiliza el operador de indirección. Los punteros, al ser variables deben ser declaradas como punteros antes de ser utilizadas.

​

Sintaxis[editar]

int *ptrID, ID;

ID = 8;

ptrID = &ID; // puntero a ID

​

ptrID es un puntero a int, mientras que la variable ID es solo una variable del tipo int. Todo puntero debe ser precedido por un asterisco (*) en la declaración.

Se puede declarar más de un puntero en la misma sentencia. En el ejemplo que sigue se ve la declaración de dos punteros a int.

int *ptrY, *ptrX;

Operadores[editar]

Existen dos operadores a tener en cuenta cuando trabajamos con punteros. El operador de dirección (&) que devuelve la dirección de memoria de su operando y el operador de indirección (*) que devuelve un alias para el objeto al cual apunta el operando del puntero.

En el siguiente ejemplo vemos como se inicializa una variable X con el valor 15. Luego se crea un puntero a int y por último el puntero pasa a apuntar a la variable X. Esto es, ptrX es un puntero

 

a X.

int X = 15;

int *ptrX;

ptrX = &X;

​

Punteros y vectores (arrays)[editar]

Los vectores son punteros constantes. Un vector sin subindice es un puntero al primer elemento del vector. Una matriz es un vector de vectores. (Ej: int M[3][3];) de manera que en cada elemento del primer vector "se cuelga" otro vector, pudiendo hacer así referencia a filas y columnas.

​

int X[15];

int *ptrX;

ptrX = X; // ptrX recibe la dirección del primer elemento ( 0 ) de X

Así como también podría escribirse

int X[15];

int *ptrX;

ptrX = &X[0]; // ptrX es igual a la dirección del primer elemento de X

​

Se pueden utilizar distintos elementos del vector teniendo en cuenta la sintaxis de punteros.

​

int X[15], Y, *ptrX;

ptrX = X;

 

Y = *( ptrX + 7 );

​

En este caso puede verse que Y toma el valor del elemento 7 del vector X, siendo 7 el desplazamiento dentro del vector. El operador de indirección queda fuera del paréntesis porque tiene una prioridad superior a la del operador +. De no existir los paréntesis, se sumaria 7 al elemento X[0]. Teniendo en cuenta que los vectores son punteros constantes, el nombre del vector puede tratarse como un puntero:

Y = *( X + 7 );

Punteros en c++
Punteros en c++
Tipos de punteros

Tutorial

YouTube_logo_(2013-2015).png
kisspng-arrow-font-awesome-computer-icon
bottom of page