Vous êtes sur la page 1sur 5

¿Qué son los punteros?

*J= Los punteros permiten simular el paso por referencia, crear y manipular estructuras dinámicas
de datos, tales como listas enlazadas, pilas, colas y árboles. Generalmente las variables contienen
valores específicos.

*V= 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 (<TIPO> * <NOMBRE VAR>). Los punteros, al ser
variables deben ser declaradas como punteros antes de ser utilizadas. Por ejemplo:

Asignación dinámica de memoria

*J= Cuando utilizamos punteros la reserva de memoria se realiza dinámicamente en tiempo de


ejecución, sin la necesidad de tener que especificar en la declaración de variables la cantidad de
memoria que vamos a utilizar.

*V= La reserva de memoria dinámica le da una gran flexibilidad a los programas porque le permite
al programador la posibilidad de reservar la cantidad de memoria exacta en el preciso instante en
el que se vaya a necesitar, sin tener que realizar una reserva de memoria.

Ventajas de los punteros (*J=)

+ Permiten pasar valores a otras funciones solamente pasando el puntero donde está la variable.

+ Permite asignar más memoria de manera dinámica en tiempo de ejecución.

+ Permite crear ciertos tipos de estructuras de datos complejas como listas encadenadas, cuyo
diseño hace que sean muy eficientes a la hora de insertar un nuevo elemento.
Desventajas de los punteros (*V=)

+ Puede llenar rápidamente la memoria disponible con datos inaccesibles, causando una pérdida
de memoria.

+ Pueden provocar desbordamiento de memoria cuando se asigna un puntero de memoria y no es


lo suficientemente grande para la entrada que recibe.

+ Pueden dejar elementos en memoria sin referencias.

Operaciones aritméticas con punteros

*J= Un puntero nos permite sumar o restar números enteros, pero su funcionamiento ahora es de
posiciones, es decir que nos permitirá movernos a la siguiente dirección de memoria.

*J= A un puntero no se le puede realizar multiplicaciones, divisiones, sumas o restas con otro
puntero o con un valor de tipo flotante. Ya que, un puntero no es un valor, sólo es una dirección.

*V= En un puntero se pueden realizar varias operaciones de tipo enteras, pero en dependencia de
cómo se usen, sus resultados pueden ser muy diferentes. Por ejemplo:
Punteros genéricos

*J= Un puntero a cualquier tipo de dato puede convertirse a un puntero del tipo void *. Por esto
un puntero a void *, recibe el nombre de puntero genérico.

*V= En C, se permite la conversión implícita de punteros, pero en C++ esto no es posible, así que
por compatibilidad y buena práctica recomendamos usar la conversión explícita. Por ejemplo:

*J= Cabe resaltar que no podemos trabajar con punteros que referencia a un tipo de dato
diferente, como lo es un puntero a char, con un puntero a int. Sin embargo, un puntero a void se
puede usar sin importar el tipo de dato.

Punteros y matrices (*V=)

Los punteros los podemos utilizar como si de una matriz se tratase. Si comparamos una matriz con
un puntero, los punteros nos permiten realizar cosas que con un array normal no se podría, como
asignarle memoria dinámica. Por ejemplo:
Punteros a cadenas de caracteres (*J=)

Ya hemos visto el uso que se le puede dar a un puntero como si de un array se tratase, entonces
usando esta misma lógica podemos hacer un array de caracteres usando punteros.

Para poder modificar el valor de este puntero, este tendría que apuntar a una dirección que no sea
una constante, como un array.

Matrices de punteros

*J= Como un puntero trabaja de la misma forma que un array, podríamos decir que un puntero es
un array. Entonces si definimos un array de un array, nos daría como resultados un array
bidimensional. En la práctica es mucho más común utilizar un array de punteros que un array
bidimensional.

*V= Hay que recordar que siguen siendo punteros, es decir sólo apuntan a una dirección de
memoria, por ende hay que asignarles la dirección de memoria a cada uno de los elementos del
puntero. Sin embargo podemos asignar en un solo ciclo todas las filas. Por ejemplo:
Punteros a punteros

*V= Los “punteros a punteros” son variables que contienen la dirección de memoria de un
puntero, el cual a su vez contiene la dirección de memoria de un tipo de dato. Recordemos que un
puntero sigue siendo un espacio en memoria, pero en vez de almacenar un valor almacena una
dirección. Por ejemplo:

*J= Al uso de estos punteros se les llama variables con niveles de indireccion, ya que no apuntan
directamente a un valor, sino que apuntan a alguien que lo tiene. Basándonos en esto podemos
decir que *puntero1 es un puntero con un nivel de indireccion y *puntero2 es un puntero con dos
niveles de indireccion. En general estos tipos de datos son usados en matrices multidimensionales.

Vous aimerez peut-être aussi