Punteros

Iniciado por cNoob, 27 Junio 2016, 20:32 PM

0 Miembros y 2 Visitantes están viendo este tema.

cNoob

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.
Wannabe programador autodidacta de c++
"Usain Bolt comenzó gateando."

AlbertoBSD

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.

[youtube=640,360]https://www.youtube.com/watch?v=b-rnszAiQgc[/youtube]
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

cNoob

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
Wannabe programador autodidacta de c++
"Usain Bolt comenzó gateando."

AlbertoBSD

#3
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!

#include<stdlib.h>
#include<stdio.h>
#include<time.h>


int main() {
int *arreglo = NULL;
unsigned int i = 0;
srand(time(NULL)); //Inicilizamos la semilla aleatoria
do {
arreglo =(int*) realloc(arreglo,(i+1)*sizeof(int)); //reservamos para i+1 elementos
arreglo[i] = rand(); //Guardamos un numero random en arreglo[i]
printf("Guardando %i en el arreglo posicion [%lu]\n",arreglo[i],i);
i++; //Incrementamos contador
}while(arreglo[i-1] != 20000); //Continuamos hasta que el numero sea 20000
printf("Se guardardon %lu elementos\n",i);
return 0;
}


Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

cNoob

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...
Wannabe programador autodidacta de c++
"Usain Bolt comenzó gateando."

AlbertoBSD

#5
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

[youtube=640,360]https://www.youtube.com/watch?v=HzYRDD_-1Yc[/youtube]
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW