elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Para que sirven los Punteros?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Para que sirven los Punteros?  (Leído 9,227 veces)
..:ALT3RD:..

Desconectado Desconectado

Mensajes: 205


C++ Programmer


Ver Perfil
Para que sirven los Punteros?
« en: 16 Octubre 2011, 15:45 pm »

Buenas  :D

ando liado con los estudios asi que desde hace una semana no toco C++ y hoy quería empezar con los punteros ya que según dicen es algo imprescindible en C++. Vi un video sobre punteros en el que explicaban que un puntero es un tipo de variable que contiene una direccion en la memoria. Seguidamente te explicaban como declarar estos punteros y como se usan y para que. Tambien te hacian un pequeño ejercicio.
He usado el buscador pero no he encontrado nada que me aclaré, lo que quiero saber es para que sirven realmente los punteros.
Repito ya se que son un tipo de variable que contiene una direccion en la memoria, pero quiero ejemplos reales de para que se podrian usar y tambien quiero saber a que se debe su importancia.Otra cosa que no entiendo es porque dicen que es tan dificil, yo lo vi como una lección mas de C++, seguramente luego me trague mis palabras pero a simple vista me pareció fácil.


Un salu2!


« Última modificación: 16 Octubre 2011, 15:48 pm por ..:ALT3RD:.. » En línea

"Mañana sabrás que hoy no sabes nada"
El_Java

Desconectado Desconectado

Mensajes: 144



Ver Perfil WWW
Re: Para que sirven los Punteros?
« Respuesta #1 en: 16 Octubre 2011, 16:03 pm »

Uno de los ejemplos más comunes para el uso de punteros es el paso de datos extremadamente grandes como argumento de una función.
Imagina que tienes un dato muy grande, y que quieres pasarlo a una función, como ya sabes, los argumentos cuando se pasan se copian, por lo que se puede decir que son dos variables distintas, al tener que copiarlas gastas más memoria.
Para solucionar esto, pasas como argumento un puntero al dato tan grande que quieres pasar, por lo que actúas directamente en el dato.
Un ejemplo:
Código
  1. void func (long long* dato){
  2.    //dato es un puntero al dato tan grande;
  3. }
  4.  
  5. int main(){
  6.   long long dato;
  7.   ...
  8.   func(&dato); //Pasas la direccion de dato
  9.   ...
  10.   return 0;
  11. }

Hay muchas más aplicaciones, pero esta es una de las más sencillas.

Pd. me gusta tu avatar ;)


En línea

..:ALT3RD:..

Desconectado Desconectado

Mensajes: 205


C++ Programmer


Ver Perfil
Re: Para que sirven los Punteros?
« Respuesta #2 en: 16 Octubre 2011, 16:07 pm »

Digamos en resumen que sirven para optimizar el programa no?


PD: Y a mi el tuyo  :silbar: Bueno supongo que no es raro encontrar dos avatares de Ubuntu en un foro de Informatica   ;D ;D
En línea

"Mañana sabrás que hoy no sabes nada"
El_Java

Desconectado Desconectado

Mensajes: 144



Ver Perfil WWW
Re: Para que sirven los Punteros?
« Respuesta #3 en: 16 Octubre 2011, 16:38 pm »

Pienso que eso es generalizar demasiado, pero se puede decir que sí que sirven para eso.
Tambien se usan para moverte estructuras dinamicas (TLA, creo que era), para el poliformismo de clases, para pasar cualquier argumento haciendo un casting (void *), etc...
« Última modificación: 16 Octubre 2011, 16:40 pm por El_Java » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Para que sirven los Punteros?
« Respuesta #4 en: 16 Octubre 2011, 17:15 pm »

Aclaro que lo siguiente es en relación a C, la mayoría también aplica a C++ pero tienen sus diferencias así que, cuidado.

Una de las razones, como ya te comento El_Java, es para evitar la copia del argumento. Siguiendo su ejemplo otra ventaja es la posibilidad (mediante indireccion) de modificarlo. Sin embargo C++ agrego las referencias que solucionan ambos problemas.

Otra razón es la capacidad de indicar el uso de una función en particular (en C++ son los famosos predicados). Ya que los objetos y las funciones son entidades distintas la única forma de indicar una función es mediante un puntero a esta.

El mejor ejemplo en la biblioteca estándar de C son las funciones bsearch y qsort, como sus nombres lo indican la primera busca y la segunda ordena cualquier tipo de array. El problema es el método de comparación, ya que dependiendo del tipo se debe realizar una comparación distinta. Ello se soluciona con el paso de un puntero a función.

Un ejemplo de qsort para ordenar un array de enteros:
Código
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4.  
  5. #define NUM_ELEM 16
  6.  
  7. int fn_cmp(const void *p, const void *q);
  8.  
  9. int main(void)
  10. {
  11.   int i, num[NUM_ELEM];
  12.  
  13.   srand((unsigned) time(NULL));
  14.  
  15.   printf("Array sin ordenar:");
  16.   for (i = 0; i < NUM_ELEM; i++){
  17.      num[i] = rand() % NUM_ELEM;
  18.      printf("%3d", num[i]);
  19.   }
  20.   puts("");
  21.  
  22.   /* Ordenar el array de forma ascendente (menor a mayor) */
  23.   qsort(num, (size_t) NUM_ELEM, sizeof(num[0]), fn_cmp);
  24.  
  25.   printf("Array ordenado:   ");
  26.   for (i = NUM_ELEM; i > 0; i--)
  27.      printf("%3d", num[i - 1]);
  28.   puts("");
  29.  
  30.   return EXIT_SUCCESS;
  31. }
  32.  
  33. int fn_cmp(const void *p, const void *q)
  34. {
  35.   int a = *(int *) p;
  36.   int b = *(int *) q;
  37.  
  38.   if (a < b)
  39.      return -1;
  40.   else if (a == b)
  41.      return 0;
  42.   else
  43.      return 1;
  44. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
..:ALT3RD:..

Desconectado Desconectado

Mensajes: 205


C++ Programmer


Ver Perfil
Re: Para que sirven los Punteros?
« Respuesta #5 en: 16 Octubre 2011, 17:21 pm »

Me va quedando mas claro, Un salu2 y Gracias  ;)
En línea

"Mañana sabrás que hoy no sabes nada"
pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Para que sirven los Punteros?
« Respuesta #6 en: 16 Octubre 2011, 19:59 pm »

He usado el buscador pero no he encontrado nada que me aclaré, lo que quiero saber es para que sirven realmente los punteros.
Los punteros sirven para las estructuras que manejan memoria de forma dinamica, ese es su principal objetivo.
( busca codigo de una 'lista enlazada' y te va a quedar mas claro ).

Otra cosa que no entiendo es porque dicen que es tan dificil, yo lo vi como una lección mas de C++, seguramente luego me trague mis palabras pero a simple vista me pareció fácil.
Los punteros son muy mentirosos, el problema no es el puntero en si, sino el manejo de memoria de forma manual. Hay estructuras de datos cuyos objetos tienen ciclos de vida bien definidos y muy claros, pero hay otros que no, donde resulta muy dificil saber si un objeto sigue en uso o ya se puede liberar la memoria que tiene asignada.
Otro problema de los punteros es que al producirse una excepción, podrias perder las referencias a algunos objetos y terminarias con 'memory leaks'. Inclusive codigo que parece totalmente seguro, puede llegar a producir excepciones que uno no espera.

Por ahora tomatelo con soda, mira tranqui y anda avanzando, mas adelante van a empezar a aparecer los problemas con punteros y vas a ir conociendo algunos enfoques clasicos para resolverlos ( como por ej los smart pointers ).
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
firmware!!! ¿para que sirven?
Software
aliteroid 1 3,147 Último mensaje 10 Abril 2006, 17:21 pm
por el-brujo
para que sirven los puos en en un dvd?
Multimedia
druguito 1 1,946 Último mensaje 13 Julio 2006, 09:58 am
por CHI<`;´>NO©
Punteros ** y *** en C. ¿Para que sirven?
Programación C/C++
Agente Naranja 3 37,447 Último mensaje 25 Noviembre 2012, 06:15 am
por theinzide
No entiendo para que sirven los punteros :/
Programación General
$Edu$ 6 4,611 Último mensaje 27 Noviembre 2011, 17:36 pm
por folostia
reCaptcha para que sirven realmente
Foro Libre
_Enko 1 1,987 Último mensaje 30 Septiembre 2012, 20:03 pm
por Stakewinner00
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines