Array dinamici bidimensionali

di il
4 risposte

Array dinamici bidimensionali

Buongiorno,

mi sono appena iscritto al forum e vi saluto.
Inizio con il chiedervi un piccolo aiuto.

Sto scrivendo un programmino per lavorare con le matrici quadrate.
L'utente deve inserire il rango della matrice "r" ed il programma deve visualizzare la matrice stessa e la sua trasposta.
Utilizzo un array bidimensionale allocato dinamicamente con la malloc().
Dichiaro un puntatore ad un array che contiene r valori int per ogni riga nel modo seguente:

int (*m)[r];

come descritto dal manuale ma compilando, rileva un errore relativo a questa riga:


variably modified ‘m’ at file scope


Sapete di che cosa si tratta?

Ciao e grazie

4 Risposte

  • Re: Array dinamici bidimensionali

    La matrice non può sapere il valore di r e quindi non può allocare memoria di spazio ignota. devi prima definire r come const oppure tramite define se intendi non modificarla. Se invece lo devi modificare devi dichiarare la matrice come int **m e allocare memoria a seconda del valore di r.
  • Re: Array dinamici bidimensionali

    Ottimo

    ora funziona, mi potresti spiegare il significato del doppio asterisco **int?

    ciao e grazie
  • Re: Array dinamici bidimensionali

    È una predisposizione ad una matrive dinamica. Siccome la matrice è m[r][c] la stessa è equivalente a (*m)[r] oppure **m. La diferenza è che nel caso del doppio puntatore non specifichi la dimensione ne di riga ne di colonna.
    Ecco un esempio:
    
    //implementi la matrice con dimensione ignota
    int **M;
    //prendi la dimensione dall'input (scelta utente)
    cin >> d;
    //applichi la dimensione alla matrice
    int i = 0;
    M = new (int *)[d];
    for(i = 0; i < d; i++)
       M[i] = new int[d];
    //alla fine del programma liberi i blocchi di memoria che hai occupato
    for(i = 0; i< d; i++)
        delete [] M[i];
    delete [] M;
    
  • Re: Array dinamici bidimensionali

    Grazie molte!
Devi accedere o registrarti per scrivere nel forum
4 risposte