Foros del Web » Programación para mayores de 30 ;) » Programación General »

Lenguaje C, ¿Qué utilidad tiene los punteros?

Estas en el tema de Lenguaje C, ¿Qué utilidad tiene los punteros? en el foro de Programación General en Foros del Web. Buenas noches !!! Bueno, verán, estoy empezando a estudiar algo de C (Por culpa del trabajo) y no entiendo muy bien la utilidad de los ...
  #1 (permalink)  
Antiguo 29/12/2004, 18:12
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Lenguaje C, ¿Qué utilidad tiene los punteros?

Buenas noches !!!

Bueno, verán, estoy empezando a estudiar algo de C (Por culpa del trabajo) y no entiendo muy bien la utilidad de los punteros.

Bien, que yo sepa un puntero es un apuntador a X variable. Es decir:

int *puntero; //Declaro el puntero
int variable;
puntero=&variable;

*puntero=20;
printf("%d", variable); //Y sale 20

Entonces, yo entiendo por puntero en que es una copia de la variable a la que apunta. Se, o me imagino que lo que digo está mal. Pero por las pruebas que veo, es lo que deduzco.

He leido algo de punteros, pero no entiendo bien la definición, vale, se que apunta a una posición de memoria, pero cuando cambio de valor el puntero como hice antes en: *punter=20; también me cambia la variable, ¿Entonces?, ¿Alguien puede decirme que es lo que pasa y ponerme un ejemplo?

Nuevamente gracias a toos, que soys todos unos genios.
__________________
Charlie.
  #2 (permalink)  
Antiguo 29/12/2004, 18:22
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Un puntero no es una copia de una variable, un puntero es una variable de 4 bytes (en Windows y Linux) que guarda una dirección de memoria. Si modificas esa dirección de memoria (*puntero=20) se refleja el cambio en la variable porque previamente le has dado a puntero la dirección de memoria de la variable 'sic' variable.

Un ejemplo muy simple es el uso de memoria dinámica para variables, en este caso cadenas:

char *mensaje = (char*)malloc(1024); //creamos un buffer de 1024 bytes
ZeroMemory(mensaje, 1024); //lo inicializamos a 0
strcpy(mensaje, "hola"); //le copiamos la cadena hola
printf(mensaje); //imprimimos en pantalla la cadena mensaje, pasando la dirección de memoria de mensaje como parámetro
free(mensaje); //liberamos la memoria utilizada
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 29/12/2004, 18:26
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Otro ejemplo usando punteros:

size_t strlen(const char *s)
{
unsigned long Result = 0;
while(*s++) { Result++; }
return Result;
}
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #4 (permalink)  
Antiguo 30/12/2004, 00:07
 
Fecha de Ingreso: diciembre-2004
Ubicación: Guatemala
Mensajes: 6
Antigüedad: 19 años, 4 meses
Puntos: 0
Curso de punteros

De esta dirección te podés descargar un curso de punteros bastante completo y legible.
http://www.elrincondelc.com/cursos/punteros_c.zip
  #5 (permalink)  
Antiguo 30/12/2004, 01:11
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Ademas de que con los punteros creas PILAS, COLAS, LISTAS, ARBOLES, GRAFOS...

Juegas con La memoria de la Computadora para solucionar problemas que se te presentan.

por ejemplo, como haces para multiplicar esto:

12359823458971098370497813409856872346587263974851 234 * 17238465987236495876239847569827364578628736457862 38746587629387456

que tipo de dato acepta esa cantidad?? Double, Float?? no lo creo!!

entonces usas una lista o una estructura de tantas para solucionar eso, y pues necesitas forsozamente PUNTEROS para poder enlazar esos numeros, bueno esto es un poco mas avanzado, pero creo que es un buen ejemplo!!

bytes....
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 17:18.