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
.