Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Punteros

Estas en el tema de Punteros en el foro de C/C++ en Foros del Web. Estoy intentando aprender un poco de c++, y me ha surgido una duda, que no entiendo con lo que encuentro por internet. Es el uso ...
  #1 (permalink)  
Antiguo 20/10/2010, 12:24
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Punteros

Estoy intentando aprender un poco de c++, y me ha surgido una duda, que no entiendo con lo que encuentro por internet.

Es el uso de punteros. Hasta ahora estoy viendo que se utilizan para almacenar una dirección de la memoria (donde hay datos), y he visto que puede ser en la memoria donde se guardan las variables (volátil) y en la free store (que no se borra si no se dice).

La historia está en que no acabo de comprender porque complicar las cosas tanto. Porque utilizar un puntero que apunta a una variable, si se puede poner la variable directamente.

Igual que utilizar un puntero en la free store, si se puede poner una variable global y poder acceder a ella desde donde sea (repito que no se mucho de c++, estoy aprendiendo).

Me gustaría que me diesen algún ejemplo, donde pueda ver en realidad la ventaja de utilizar punteros en cambio de variable.

Se que aún me quedan por ver varios tipos de punteros, pero es que ya me ha surgido la duda.

Gracias, itomailg.
  #2 (permalink)  
Antiguo 20/10/2010, 13:08
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 13 años, 11 meses
Puntos: 228
Respuesta: Punteros

Para empezar, todo tipo de variable se guarda en la memoria. Esta memoria esta dividida en varios sectores. La zona estatica y la zona volatil.

Cada vez que entramos en una funcion se crea en la zona volatil un marco de activacion donde se guardan las variables locales. Cuando esta funcion termina este marco de activacion se pierde y puede ser instantaneamente pisado por otro llamado a funcion o la funcion llamante de la misma.
Por otro la do la zona de memoria estatica esta para guardar valores que no puedan ser pisado durante la ejecucion del programa, a menos, que sean liberados.

Ahora porque esta el hecho de la memoria volatil y la estatica. Para empezar si todo estuviese en memoria estatica las funciones no podiran ser llamadas de forma recursiva ya que el valor de las variables locales se pisarian en cada llamado.

Y ahora porque se utilizan punteros? Pensa en lo siguiente, los programas que manejan gran informacion de datos, como los editores de videos, imaginate si a penas arranca el programa crea una variable global de 500MB para un buffer de manejo de video. Y simplemente el usuario ingresa un video de un mega. Hay un gran sobrante de memoria que esta siendo consumida.

Para evitar esto se usa memoria dinamica que se aloja a pedido en momento de ejecucion. Pero para acceder a esta memoria en momento de ejecucion no vamos a tener el nombre de la variable, sino que vamos a tener un puntero a la direccion de memoria dodne alojamos esta memoria.

Otro uso puede ser para modificar una variable local que no sido destruida desde otro funcion. Ya que seria inacecible desde otros funciones.
  #3 (permalink)  
Antiguo 20/10/2010, 13:39
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Punteros

Gracias, tienes razón con lo de las variables locales (totalmente lógico), pero en los ejemplos que he visto (que a lo mejor no son realistas) crean un objeto en memoria free store (me parece que se llama así, no volátil), y luego utiliza el puntero para acceder a sus funciones.

Cuando creas un objeto, y se guarda en la memoria volátil ¿este no se mantiene todo el tiempo que se ejecuta el programa?

Si la pregunta de antes es que si, ¿porque acceder a funciones de ese objeto por un puntero? ¿y no poniendo el nombre del objeto?. Si necesitamos cambiar una variable privada de un objeto, ¿porque no hacer la variable publica? y ya se podrá cambiar sin problemas.

Repito que estoy intentando aprender, puede ser que todo lo que digo sean burradas, si es así, perdón. Ya me imagino que si los puntero están es por algo, lo que pasa es que me cuesta mucho entender las ventajas de los punteros.

Gracias, por contestar.
  #4 (permalink)  
Antiguo 20/10/2010, 16:16
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 13 años, 11 meses
Puntos: 228
Respuesta: Punteros

Algo volatil es que desaparece con el tiempo. Esa memoria que vos llamaste volatil en tu primer post, es la memoria que se ubica en el stack segment. Esta parte de la memoria va cambiando constantemente segun las operacion que se van realizando, si es necesario guardar valores temporalmente como unas variables locales.

Cuando creas un objeto este puede ser de forma local o global, en la parte de memoria dinamica. Por lo general cuando creas un objeto con new este se ubica en la memoria dinamica y se devuelve un puntero para poder utilizarlo.

Como sabes se pueden crear muchas instancias de un mismo objeto. Por lo que si uno parsona necesitaria tener 10, 20,o 100 objetosw de estos, no podria llevar 100 variables distintas. Por lo que aca es donde se usan los punteros.

Etiquetas: punteros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:03.