Array dinamici bidimensionali

di Anonimizzato7888 il
4 risposte
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

  • 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.
  • Ottimo

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

    ciao e grazie
  • È 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;
    
  • Grazie molte!
Devi accedere o registrarti per scrivere nel forum
4 risposte