Definizione matrici multidimensionali

di il
6 risposte

Definizione matrici multidimensionali

Per la definizione di un array posso scrivere
int M[]={5,6,8,10};
e se volessi definire le componenti di un array multidimensionale?

Grazie

6 Risposte

  • Re: Definizione matrici multidimensionali

    Sempre del tipo:
    
    int M[][2]={ {3,4} , {5,6} , {8,2} }; //2D
    int N[][2][4]={ { {0,1,2,3} , {4,5,6,7} } , { {8,9,10,11} , {12,13,14,15} } , { {16,17,18,19} , {20,21,22,23} } } //3D
    
    solo il primo indice può essere [] , per i restanti devono essere definiti.
  • Re: Definizione matrici multidimensionali

    Vorrei capire una cosa, se scrivo, all'interno del main:
    int n[5];
    n[5]=20;
    cout<<n[5];
    ottengo esattamente 20 piuttosto che un valore errato?
    Le celle di n sono 5, ovvero 0 1 2 3 4?
    n[5] non dovrebbe esistere secondo logica! Il compilatore non da errore e tutto pare funzionare.
    Non funziona, però, se scrivo:
    int n[5];
    n[6]=20;
    cout<<n[6];
    Come mai c'è questa situazione?


    Grazie
  • Re: Definizione matrici multidimensionali

    sps ha scritto:


    n[5] non dovrebbe esistere secondo logica!
    E' più o meno la storiella del calabrone: non dovrebbe ma esiste.
    Lo standard afferma che la posizione immediatamente adiacente all'ultima cella non può essere usata per memorizzare valori, ma usata unicamente come segnaposto.
    Vale a dire che - n[5]=qualcosa - ha comportamento indefinito, ma &n[5] è un valore valido e contiguo all'array.
    Nella pratica serve come limite superiore.
    Equivale a scrivere:
    
    ptr_type* start = &n[0];
    ptr_type* stop = &n[5];
    
    oppure 
    ptr_type* start = n;
    ptr_type* stop = n+5;
    
    if (start < stop) etc...
    
  • Re: Definizione matrici multidimensionali

    Che tipo è:
    'ptr_type*' ?
    scusa l'ignoranza ma adesso sto studiando il C++

    A quanto ho capito, non si dovrebbe usarlo perché per le specifiche non funziona, però funziona.

    Grazie
  • Re: Definizione matrici multidimensionali

    Ptr_type è il nome del tipo del puntatore. Se ti confonde mettici void*, char*, int* a seconda del tipo di array che hai tra le mani. Il concetto è sempre quello.
    A quanto ho capito, non si dovrebbe usarlo perché per le specifiche non funziona, però funziona.
    Quello che ti ho mostrato è l'unico uso legale, consentito dallo standard. Poi ogni compilatore fa come meglio crede (comportamento indefinito significa questo).
    C'è chi fa finta di nulla, chi fa bang! Chi formatta il PC...
  • Re: Definizione matrici multidimensionali

    Ho capito
    grazie
Devi accedere o registrarti per scrivere nel forum
6 risposte