Ver Mensaje Individual
  #4  
Antiguo 06-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
Cita:
Empezado por Novatin Ver Mensaje
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.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 06-11-2012 a las 22:59:29. Razón: agregar comentarios
Responder Con Cita