Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: cNoob en 27 Junio 2016, 20:32 pm



Título: Punteros
Publicado por: cNoob en 27 Junio 2016, 20:32 pm
Hola!
He estado aprendiendo sobre los punteros pero no se en que se usan, no les veo una utilidad real. Alguien podría explicarme de que modo se usan en un programa y si es posible un pequeño ejemplo?
Gracias.


Título: Re: Punteros
Publicado por: AlbertoBSD en 27 Junio 2016, 20:43 pm
Hola, los punteros es uno de los topics mas dificil de aprender pero a su vez es una de las herramientas mas utiles en C.

De hecho en mi opinion personal yo no le veo utilidad a los arreglos estaticos... en fin es mi mera opinion.

Imagina que tienes que capturar una cantidad desconocida de datos de un mismo tipo.

Que haces declaras un arreglo... pero cuantos datos reservas? 100? 1000? un millon?

Que pasa si el usuario solo ingresa 2? habras desperdiciado memoria!!! Que pasa si el usuario ingresa 2 millones de datos? no te alcanzara!!!  entonces cual es la solucion??? El uso de apuntadores y memoria dinamica.

Un ejemplo?

Te dejo uno de mis videos donde hablamos de la estrucutra de dator Arbol binario y como los punteros nos ayudan a cargar una cantidad variable de datos.

b-rnszAiQgc


Título: Re: Punteros
Publicado por: cNoob en 27 Junio 2016, 20:57 pm
No entiendo algunas cosas del video debido a que aun no se mucho de c++, pero aun asi tu ejemplo me sirvió para entender en que se pueden usar, gracias :D


Título: Re: Punteros
Publicado por: AlbertoBSD en 27 Junio 2016, 21:10 pm
Aqui te dejo un ejemplo como el descrito, el ejemplo genera un arreglo de enteros y los llena con valor random hasta que el valor random coincida con 20000

Saludos!

Código
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<time.h>
  4.  
  5.  
  6. int main() {
  7. int *arreglo = NULL;
  8. unsigned int i = 0;
  9. srand(time(NULL)); //Inicilizamos la semilla aleatoria
  10. do {
  11. arreglo =(int*) realloc(arreglo,(i+1)*sizeof(int)); //reservamos para i+1 elementos
  12. arreglo[i] = rand(); //Guardamos un numero random en arreglo[i]
  13. printf("Guardando %i en el arreglo posicion [%lu]\n",arreglo[i],i);
  14. i++; //Incrementamos contador
  15. }while(arreglo[i-1] != 20000); //Continuamos hasta que el numero sea 20000
  16. printf("Se guardardon %lu elementos\n",i);
  17. return 0;
  18. }
  19.  



Título: Re: Punteros
Publicado por: cNoob en 27 Junio 2016, 21:18 pm
En la linea 7 has puesto "int *arreglo = NULL;" que hace el igualarlo a NULL? lo he visto varias veces y no se que es...


Título: Re: Punteros
Publicado por: AlbertoBSD en 27 Junio 2016, 21:26 pm
Todas las variables se deben de inicializar.

Se inicializa en NULL para indicar que no esta apuntado a NADA.

Y realloc valida que si esta en NULL genera un nuevo apuntador.

Saludos!



Hice un video de este tema

HzYRDD_-1Yc