[C++] Passaggio di una matrice a un sottoprogramma
Salve a tutti,ritorno,dopo tempo,a scrivere in c++ e sono un pochino arruginito riguardo il passaggio di una matrice a un sottoprogramma. Allora io nel main dichiaro la mia matrice di dimensioni d,decise dall'utente.Quindi scriverò int m[d][d]; in modo da creare la mia matrice. Il problema sorge quando voglio passare per valore la matrice al sottoprogramma. Come devo scrivere i parametri. Con i puntatori è semplice,basta fare (int *m,int d) e sto tranquillo.Ma se non volessi usare i puntatori come potrei fare? Magari se potete allegare un esempio con la lettura di una matrice,così risolviamo subito. Grazie a tutti della disponibilità


Risposte
Quello che scrivi di fare nel main non è standard C++, ma permesso da una estensione di gcc e io sinceramente lo sconsiglierei fortemente. Per quanto riguarda il secondo punto non puoi farlo in modo diverso da quello che hai già segnalato. Potresti farlo se il numero delle colonne fosse deciso in tempo di compilazione ma dalle premesse direi che è semplicemente impossibile (a meno di usare i template, ma in quel caso il codice si complica e non vedo alcun reale vantaggio).
Se quindi faccio inserire la dimensioni all'utente non ho alternative ai puntatori?
Volendo puoi inserire la matrice in una struttura e passare la struttura ma sostanzialmente il punto è quello.
Comunque il problema è che tu hai d inserito dall'utente e definisci la matrice come int M[d][d]; Seppur il tuo compilatore te lo accetta è codice C++ non valido, non portabile e problematico se d diventa grande. Il medoto più appropriato sarebbe usare la memoria dinamica o le librerie standard.
Comunque il problema è che tu hai d inserito dall'utente e definisci la matrice come int M[d][d]; Seppur il tuo compilatore te lo accetta è codice C++ non valido, non portabile e problematico se d diventa grande. Il medoto più appropriato sarebbe usare la memoria dinamica o le librerie standard.
Salve a tutti,ritorno,dopo tempo,a scrivere in c++ e sono un pochino arruginito riguardo il passaggio di una matrice a un sottoprogramma. Allora io nel main dichiaro la mia matrice di dimensioni d,decise dall'utente.Quindi scriverò int m[d][d]; in modo da creare la mia matrice. Il problema sorge quando voglio passare per valore la matrice al sottoprogramma. Come devo scrivere i parametri. Con i puntatori è semplice,basta fare (int *m,int d) e sto tranquillo.Ma se non volessi usare i puntatori come potrei fare? Magari se potete allegare un esempio con la lettura di una matrice,così risolviamo subito. Grazie a tutti della disponibilità![]()
provo a dire la mia, così mi tolgo anche qualche dubbio.
da quel che so gli array nel c++ sono sempre passati per riferimento. nel caso della lettura il problema non si pone, in quanto l'array non viene modificato. per esempio un semplice sottoprogramma per la lettura di una matrice potrebbe essere il seguente
void mostra_matrice(int v[20][20], int rig, int col) { for(int i = 0; i < rig; i++) { std::cout << std::endl; for(int j = 0; j < col; j++) { std::cout << v[i][j] << " \t "; } } }
per quanto riguarda l'allocazione dinamica dell'array , se indispensabile, potresti usare la classe vector
Grazie delle risposte,gentilissimi

"Super Squirrel":
per quanto riguarda l'allocazione dinamica dell'array , se indispensabile, potresti usare la classe vector
Supponendo l'uso del C++11 o C++14, la classe array è più appropriata nel caso in questione. D'altra parte non sono bidimensionali e io non consiglierei l'uso di
std::array<std::array<int, d>, d> m;quanto piuttosto di
std::array<int, d*d> m;ma il codice del passaggio a funzione sarebbe solo parzialmente differente da quello con il puntatore.
E comunque non è una questione di indispensabile, ma di correttezza del codice.