Newsgroup: it.comp.lang.c++
Titolo: Matrice come argomento di funzione?!?

Ciao a tutti,
scusate la domanda forse idiota, ma non c'e' verso che riesca a passare un
array doppio ad una funzione:
pensavo che una cosa cosi' andasse bene, invece...
void myFun(double **M)
{
    cout << M[0][0];
}
main()
{
    double M[][2]={{1,2},{3,4}};
    myFun(M);
    return 0;
}
e gia' che ci sono come si dichiara un puntatore doppio a quest'array:
pensavo una cosa tipo:
    double **p;
    p=M;


Per questo, non sò cosa dirti!
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Per questo, non sò cosa dirti!
double (*p)[2][2] = &(M);
Ho rimembrato un'pò in memoria...


 Ho rimembrato un'pò in memoria...
Guarda se ti viene in mente qualcos'altro...


stiamo parlando di c++, vero? perché non fare un 
vector<vector<double> >
??? (ovviamente std::vector!!)
lo puoi passare a tutte le funzioni che vuoi e il puntatore a tale
matrice non dà nessun problema!!
-- 
]\/[ad]\/[age (
www.mindreamz.net
)
"Un Maestro insegue semplicemente la sua visione di Eccellenza in
qualunque cosa sta facendo e lascia agli altri decidere se sta 
lavorando o giocando. A lui sembra sempre di fare entrambe." - Anonimo

> Guarda se ti viene in mente qualcos'altro...
continui ad usare double **p;
ecco un esempio (template<typename T>)
T**     A;
Per crare la matrice A=alloc(size)
con un codice simile a
T** alloc(const mx_size& S)
        {
                unsigned int m=S.Rows(),n=S.Cols();
                T** M=new T*[m];
                for(unsigned int i=0;i<m;i++) M[i]=new T[n];
                return M;
        }
la classe mx_size viene da un progetto che avevo fatto una volta...
(accidenti al copia/incolla) comunque è la dimensione, possono essere due
numeri interi x e y.
Per distruggerla
void dealloc(T** M, const mx_size& S)
        {
                for (unsigned int i=0;i<S.Rows();i++) delete [] M[i];
                delete [] M;
        }
Puoi crearti tutte le funzioni che vuoi e passare il puntatore T** A (e la
dimensione, sempre, questa).
Idea ! Lavorare così con la matrice sembra una palla... Fatti una bella
classe template che gestisce la matrice (come in effetti faceva il progetto
dal quale ho estratto le due funzioni, che erano membro di una classe).
Vedrai che dopo potrai dichiarare matrici e lavorarci sopra con grande
facilità !

 matrice non dà nessun problema!!
Ok, studio ancora un po'...
Comunque GRAZIE!

> ecco un esempio (template<typename T>)
[CUT]
Ok, grazie mi metto ancora un po' studiare e poi valuto...
GRAZIE!

 double (*p)[2][2] = &(M);
Direi che sono sbagliate entrambe le forme.
Puoi usare, invece:
   double (*p)[2] = M;
oppure
   double (&e3)[3][2] = M;
Non e' corretto neanche:
   double (&e3)[][2] = M;
-- 
	Carlo Milanesi
 
http://digilander.libero.it/carlmila

 double (&e3)[][2] = M;
questo è sicuro perchè non è specificata la dimensione tra []!


 array bidimensionale!
Scusa hai ragione, questa funziona!


 array bidimensionale!
Scusa, hai ragione questa è valida come istruzione!


 Non funziona perchè le dimensioni degli array non corrispondono!
Hai ragione anche qui, intendevo scrivere:
   double (&e3)[2][2] = M;
Questo ha il pregio di non allocare memoria per il puntatore, ma anche
il difetto di vincolare entrambe le dimensioni.
