Ver Mensaje Individual
  #2  
Antiguo 05-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Novatin.

Estas dos asignaciones son equivalentes, pero se accede a la posición de dos modos diferentes:
Código:
  vP[i].a   = 1; // mediante indexación de arreglo
  (vP+i)->a = 1; // mediante el operador puntero a miembro
En el primer caso se referencia como si se tratase de un arreglo estático de struct, en el segundo como puntero a struct mediante el operador: -> .
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int num = 99;
  vP = (Punto *)malloc(sizeof(Punto)*num);

  for(int i=0;i<num;i++){
    vP[i].a = i;     // mismo efecto que: (vP+i)->a = i;
    (vP+i)->b = i+1; // mismo efecto que: vP[i].b = i+1;
    ...
  }
  ...
  free(vP);
}
De todos modos, si estas trabajando en C++, es aconsejable que abandones el uso de malloc y free por el de new y delete ya que la primera dupla devuelve un puntero a void mientras que las últimas uno del tipo del objeto creado.
Por otro lado, al crear un objeto dinámico con new, este es inicializado automáticamente por su constructor al igual que es destruido automáticamente por su destructor mediante delete. A diferencia de malloc o calloc que sólo reservan memoria.

Su sintáxis también es mas simple:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int num = 99;
  vP = new Punto[num];

  for(int i=0;i<num;i++){
    vP[i].a = i;
    (vP+i)->b = i+1;
    ...
  }
  delete []vP;
}
Saludos y bienvenido a Club Delphi .
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita