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

El porque de los punteros

Estas en el tema de El porque de los punteros en el foro de C/C++ en Foros del Web. Hoola.. a ver que hoy ando filoso y pues me salen muchas dudas se supone que usamos dynamic memory cuando no sabemos exactamente el tamaño ...
  #1 (permalink)  
Antiguo 09/06/2009, 16:46
 
Fecha de Ingreso: octubre-2008
Mensajes: 50
Antigüedad: 15 años, 6 meses
Puntos: 2
El porque de los punteros

Hoola..

a ver que hoy ando filoso y pues me salen muchas dudas se supone que usamos dynamic memory cuando no sabemos exactamente el tamaño de lo que vamos a usar y por ende mas adelante es que vamos a requerir la memoria (new, malloc etc) por ejemplo

*puntero;
cin >> tam;

puntero = new[tam];

...

delete [] puntero;

ok todo bien

pero una pregunta a veces tenemos una funcion que nos pude retornar un puntero tambien de memoria dinamica ejemplo

*puntero;

puntero = funcion(parametro);

tampoco sabemos el tamaño del puntero que nos va a retornar, no se si se entiende mi duda, podrian aclararmelo

gracias
  #2 (permalink)  
Antiguo 09/06/2009, 20:37
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: El porque de los punteros

Lo que pasa es que los punteros no necesariamente son para memoria dinamica.
Tambien se usan para ..... apuntar a la memoria ... jejej.
Por ejemplo:

char *puntero;

puntero=getFirstVoval(cadena);

En este caso no se crea ni se elimina ningun espacion en la memoria.

Solo obtenemos la direccion que la funcion nos da.

Eso es solo un ejemplo.

En cuanto a longitudes, efectivamente no es sencillo saber la longitud de los datos a los que apunta un puntero.
Generalmente se necesita de otras variables que contiene en cierta unidad el numero de datos que debe tener el espacio de memoria apuntado por el puntero.

No se si me explico bien.

De todas maneras, en las faqs hay algunas explicaciones interesante sobre punteros. Dales una leida para que te pongas a filosofar mas

Saludos
  #3 (permalink)  
Antiguo 10/06/2009, 04:40
 
Fecha de Ingreso: octubre-2008
Mensajes: 50
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: El porque de los punteros

pero se supone que si esto

puntero=getFirstVoval(cadena);

imaginemos que no devuelve un caracter sino una serie de caracteres, se supone que estan en algun sitio de la memoria, y pues debo presuponer que es memoria dinamica porque cuando retorno algo que ha sido creado en la funcion osea que cuando la funcion termine esa cosa desaparece y pues por eso no puedo retornar memoria asi a menos que sea que haya pasado por referencia algo y lo vuelva a retornar cosa que me parece poco probable..

no entiendo algo a veces a funciones estandars pasamos un puntero como parametro y pues nos puede devolver una cadena inmensa esta memoria donde es creada y si lo que estoy es apuntando al primer lugar de esa memoria, esta donde esta? en que parte?
  #4 (permalink)  
Antiguo 11/06/2009, 10:34
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: El porque de los punteros

Creo que no me explique muy bien.

En el ejemplo que te di, la funcion getPrimerVocal(char *); la funcion no crea memoria dinamica.
Solo queria ejemplificar que en este caso la funcion operaba sobre el parametro y te devolvia un puntero en funcion de dicho parametro.

Un ejemplo ams claro:

Código PHP:
char *getSegundaLetra(char *cadena)
{
return (
cadena+1);

Es un ejemplo claro de uso de punteros sin memoria dinamica. A fin de cuentas una cadena estatica es equivalente a un puntero.

Nuestra funcio no regresa un caracter. regresa la direccion donde esta el caracter que le pedimos y como ya te habia mencionado, las cadenas son en cierta forma equivalente a los punteros entonces es como si te regresara una cadena de un numero desconocido de caracteres.

No se resuelvo tu duda.

Saludos
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 10:53.