SoloCodigo
		Programación General => C/C++ => Mensaje iniciado por: chimps en Viernes  1 de Marzo de 2002, 22:24
		
			
			- 
				Si yo tengo la opcion de usar punteros o no usarlos, por ejemplo, para escribir valores del teclado hacia estructuras..
 
 Cual es la mejor opcion, usar punteros o no usarlos?
 
 Gracias
- 
				Hola!
 
 Yo lo unico que te puedo decir es que uses los punteros cuando debas gestionar la memoria dinamicamente, usas punteros.
 
 Lo de "para escribir valores del teclado hacia estructuras" no te entiendo muy bien lo que quieres decir...
 
 Espero que esto te aclare algo...
 
 Saludos,
 Tenesor
- 
				Lo que quise decir fue lo siguiente...
 Suponete que yo tengo el siguiente codigo:
 
 #include <stdio.h>
 struct personas {
 char nombre[30];
 char apellido[30];
 };
 
 struct personas amigos, *p_amigos;
 
 Para asignar un valor a las opciones de personas, yo puedo hacerlo de 2 formas:
 
 1) printf("Nombre: ");
 gets(amigos.nombre);
 
 0
 
 2) printf("Nombre: ");
 gets(p_amigos->nombre);
 
 De estas 2 formar, hay alguna que sea mejor o son las 2 iguales?
 
 Gracias.
- 
				Ok, esto cambia las cosas... pero no tanto:D
 
 Piensa que la esctructura
 
 struct personas {
 char nombre[30];
 char apellido[30];
 };
 
 
 no es mas que eso, una estrucutra compuesta, en este caso, de dos variables, por lo tanto, se puede decir que la estructura es una especie de array (conjunto de variables:)) Por lo tanto, los punteros en este caso tienen la misma ventaja que si fuese un array (o cualquier otra variable), el alojamiento en memoria DINAMICO. Pero tambien tiene un problema, que debes reservarle memoria. Supongo que ya sabras manejar el malloc, pero por si acaso, aqui te pongo un ejemplo.
 
 p_amigos = (struct personas *)malloc( sizeof(struct personas));
 
 Con esto reservas memoria y el puntero p_amigos apunta a esa memoria reservada. Por supuesto, cuando no uses mas esa memoria, debes reservarla con free, en este caso, su uso sería
 
 free(p_amigos);
 
 Todo esto se puede resumir en lo mismo que te dije en el primer mensaje que postee, que el puntero tiene la ventaja de que puedes gestionar la memoria DINAMICAMENTE, no hay mas:)
 
 Saludos,
 Tenesor
- 
				Ok, muchas gracias.
			
- 
				Para Tomar Una Decision de si Usar Un
 Puntero o la Estructura, Debes Tomar en
 Cunta lo Siguiente:
 
 Si Declaras Un Puntero a Una Structura
 struct personas *Punt_Per, Personas;
 
 Punt_Per Es Un Puntero a Una structura tipo
 Personas Pero No Apunta a Ninguna Direccion
 Definida.
 
 Por Eso La Primera Instruccion Debe Ser:
 Punt_Per = NULL;
 
 Mientras Que la Variable Personas es una structura del Tipo personas y Su Diresccion
 es &Personas.
 
 De Tal Manera Que Si:
 
 Punt_Per = &Personas;
 
 Entonces Personas ed la Estructura
 y Punt_Per es Su Direccion.
 
 Cual de las Dos Usar;
 
 Para Una Llamada de Funcion Con Argumento
 La structura Persona, Solamente Puedes
 Pasar Su Direccion
 
 Funcio_Per(&Personas);
 o
 Funcion_Per(Punt_Per);
 
 y Dentro de la Funcion Tienes Que usar el
 Puntero,
 
 En el Ejemplo Que Mencionas Tienes UN Error Por que el Puntero a la Structura No esta Inicializado.
 
 En Cuanto A cuando Usar La Structura y Cuando Usar el Puntero:
 
 Puedes Dirigirte Directamente a la structura
 Cuando:
 
 La Has Declarado Como Una Variable General;
 Cuando la has Declarado Como una Variable
 Local Dentro de la Función donde la Vas a
 Utilizar.
 
 Tienes Que Utilizar el Puntero Si Has Pasado
 la Structura Como Argumento de Una Funcion.
 Puesto Que la Una Forma de Pasar Un Arreglo,
 Union o structura Como Parametro de una Funcion es Mediante Su  Puntero.
 
 Fun_Per(struc personas *Punt_Per)
 {
 /***
 Aqui es Necesario Referirse al Puntero
 Para Accesar un Elemento de la structura
 **********************/
 }
 
 [Modificado el 3/5/02 por bench]