Cita:
Empezado por Novatin
Sin embargo mi plan era pasar los datos de los structs por referencia, es decir con el
operador -> . ¿Qué cambios debería hacer en mi array para hacer esto?
|
Hola Novatin.
Creo que la confusión te surge por que en C/C++ los arreglos y punteros son equivalentes. Esto no quiere decir que sean lo mismo, si no que mediante la aritmética de punteros, se puede acceder a los elementos de un arreglo al igual que mediante un índice.
Resumiendo, la aritmética de punteros y la indexación de arreglos son equivalentes, pero los punteros y los arreglos no.
Una forma de acceder del modo que deseas:
vP[i]->, es declararlo como apuntador a apuntador de struct, ya que para usar el operador
puntero a miembro (
->), la expresion debe estar declarada como apuntador a
struct o a
union.
Código:
#include <iostream>
using namespace std;
struct punto {
int x;
int y;
};
int main(int argc, char* argv[]) {
int i, num = 99;
struct punto **vP = (struct punto **)malloc(sizeof(struct punto)*num);
for(i=0;i<num;i++) vP[i] = (punto *)malloc(sizeof(struct punto));
// cargar unos valores del modo que solicitas
for(i=0;i<num;i++) {
vP[i]->x = i;
vP[i]->y = i+1;
}
// mostrar del mismo modo
for(i=0;i<num;i++)
cout << vP[i]->x << " " << vP[i]->y << endl;
for(i=0;i<num;i++) free(vP[i]);
free(vP);
cin.get();
}
Con new:
Código:
#include <iostream>
using namespace std;
typedef struct punto *ppunto;
struct punto {
int x;
int y;
};
int main(int argc, char* argv[]) {
int i, num = 99;
ppunto *vP = new ppunto[num];
for(i=0;i<num;i++) vP[i] = new punto;
// cargar unos valores del modo que solicitas
for(i=0;i<num;i++) {
vP[i]->x = i;
vP[i]->y = i+1;
}
// mostrar del mismo modo
for(i=0;i<num;i++)
cout << vP[i]->x << " " << vP[i]->y << endl;
delete[]vP;
cin.get();
return 0;
}
Saludos.