• Jueves 18 de Abril de 2024, 20:37

Autor Tema:  Re: Puntero o no?  (Leído 2621 veces)

chimps

  • Miembro MUY activo
  • ***
  • Mensajes: 208
    • Ver Perfil
    • http://quiqueq.blogspot.com
Re: Puntero o no?
« en: Viernes 1 de Marzo de 2002, 22:24 »
0
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

tenesor

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Re: Puntero o no?
« Respuesta #1 en: Sábado 2 de Marzo de 2002, 00:16 »
0
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
Que el toro estoque al matador, que el preso enciere al guardián, que solo sean de cerveza los tanques, que el pez pesque al pescador y que el tigre dome al domador, que la television se prohiba y el hachis se legalice, que africa sea tierra mágica y no trágica... cambiando el mundo [NS]

chimps

  • Miembro MUY activo
  • ***
  • Mensajes: 208
    • Ver Perfil
    • http://quiqueq.blogspot.com
Re: Puntero o no?
« Respuesta #2 en: Sábado 2 de Marzo de 2002, 00:35 »
0
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.

tenesor

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Re: Puntero o no?
« Respuesta #3 en: Sábado 2 de Marzo de 2002, 02:41 »
0
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
Que el toro estoque al matador, que el preso enciere al guardián, que solo sean de cerveza los tanques, que el pez pesque al pescador y que el tigre dome al domador, que la television se prohiba y el hachis se legalice, que africa sea tierra mágica y no trágica... cambiando el mundo [NS]

chimps

  • Miembro MUY activo
  • ***
  • Mensajes: 208
    • Ver Perfil
    • http://quiqueq.blogspot.com
Re: Puntero o no?
« Respuesta #4 en: Sábado 2 de Marzo de 2002, 14:55 »
0
Ok, muchas gracias.

bench

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Puntero o no?
« Respuesta #5 en: Martes 5 de Marzo de 2002, 03:38 »
0
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]