Domanda sulle matrici

di il
9 risposte

Domanda sulle matrici

Ciao ragazzi, ho una domanda da fare sulle matrici.
Se ad esempio ho una matrice 'm' 5 x 4, per indicare l'elemento di riga 2 e colonna 1 scrivo m[2][1].
Se invece ho m[2] cosa vuol dire? Mi indica l'intera riga 2?
Non mi è chiaro questo.
Grazie a tutti.

9 Risposte

  • Re: Domanda sulle matrici

    In generale sai cos'è un array? E i puntatori?
  • Re: Domanda sulle matrici

    Nippolo ha scritto:


    In generale sai cos'è un array? E i puntatori?
    si certo, quindi?
  • Re: Domanda sulle matrici

    alex989 ha scritto:


    si certo, quindi?
    Quindi ora so come regolarmi nel fornirti una risposta.

    Una matrice è un array bi-dimensionale (ossia un array di array) costituito da array di uguale dimensione.
    Come ben sai l'identificatore di un array non è altro che un puntatore che contiene l'indirizzo di memoria del primo elemento dell'array. Nel caso specifico:
    - m è un array di 5 puntatori ad (supponiamo) int, ossia, più precisamente, è un doppio puntatore ad int contente l'indirizzo di memoria di m[0] (cioè m coincide con &m[0]);
    - m (con i=0,1,2,3,4) invece è un array di 4 int, ossia, più precisamente, è un puntatore ad int contenente l'indirizzo di memoria di m[0] (cioè m coincide con &m[0]).

    Spero di aver risposto alla tua domanda, se hai qualche dubbio chiedi pure.
  • Re: Domanda sulle matrici

    Nippolo ha scritto:


    alex989 ha scritto:


    si certo, quindi?
    Quindi ora so come regolarmi nel fornirti una risposta.

    Una matrice è un array bi-dimensionale (ossia un array di array) costituito da array di uguale dimensione.
    Come ben sai l'identificatore di un array non è altro che un puntatore che contiene l'indirizzo di memoria del primo elemento dell'array. Nel caso specifico:
    - m è un array di 5 puntatori ad (supponiamo) int, ossia, più precisamente, è un doppio puntatore ad int contente l'indirizzo di memoria di m[0] (cioè m coincide con &m[0]);
    - m (con i=0,1,2,3,4) invece è un array di 4 int, ossia, più precisamente, è un puntatore ad int contenente l'indirizzo di memoria di m[0] (cioè m coincide con &m[0]).

    Spero di aver risposto alla tua domanda, se hai qualche dubbio chiedi pure.



    si questo lo so, però non ho capito perchè m coincide con &m[0])..
    se scrivo m[2] questo vuol dire che considero il primo elemento della terza riga? ( dato che la prima viene identificata con 0)
  • Re: Domanda sulle matrici

    Premesso che credo di aver già risposto a queste domande, proviamo ad analizzare i tuoi dubbi...
    però non ho capito perchè m coincide con &m[0])..

    Il motivo come già detto nel precedente post è il seguente: l'identificatore di un array non è altro che un puntatore costante che contiene l'indirizzo di memoria del primo elemento dell'array.
    Se poi intendi altro cerca di essere più chiaro.

    se scrivo m[2] questo vuol dire che considero il primo elemento della terza riga? ( dato che la prima viene identificata con 0)

    In C/C++ ad ogni variabile/costante è associato un tipo. Detto ciò, m[2] di che tipo è?

    Per chiarirti un po' le idee potresti provare a lanciare il seguente codice ed osservarne l'output:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int m[5][4] = {{ 1,  2,  3,  4},
                       { 5,  6,  7,  8},
                       { 9, 10, 11, 12},
                       {13, 14, 15, 16},
                       {17, 18, 19, 20}};
    
        cout <<  m[2] << endl << &m[2][0] << endl <<  *(m + 2) << endl << endl;
        cout << *m[2] << endl <<  m[2][0] << endl << **(m + 2) << endl << endl;
    
        cout <<   m[2] + 3  << endl << &m[2][3] << endl <<   *(m + 2) + 3  << endl << endl;
        cout << *(m[2] + 3) << endl <<  m[2][3] << endl << *(*(m + 2) + 3) << endl << endl;
    }
  • Re: Domanda sulle matrici

    Scusate,
    ma m[2] non è la locazione di memoria a cui punta il terzo elemento della prima colonna o ancor meglio dove inizia il primo elemento del terzo array (riga)? Perché in definitiva un array bidimensionale non è un puntatore a puntatore?
    Grazie e saluti
  • Re: Domanda sulle matrici

    deckard ha scritto:


    Scusate,
    ma m[2] non è la locazione di memoria a cui punta il terzo elemento della prima colonna o ancor meglio dove inizia il primo elemento del terzo array (riga)? Perché in definitiva un array bidimensionale non è un puntatore a puntatore?
    Grazie e saluti
    Quale delle precedenti affermazioni non ti torna?
    Forse la mia domanda:

    Nippolo ha scritto:


    m[2] di che tipo è?
    poteva essere posta meglio dicendo:
    quale tipo di variabile potrebbe contenere il dato m[2]?
  • Re: Domanda sulle matrici

    Nippolo ha scritto:


    deckard ha scritto:


    Scusate,
    ma m[2] non è la locazione di memoria a cui punta il terzo elemento della prima colonna o ancor meglio dove inizia il primo elemento del terzo array (riga)? Perché in definitiva un array bidimensionale non è un puntatore a puntatore?
    Grazie e saluti
    Quale delle precedenti affermazioni non ti torna?
    Forse la mia domanda:

    Nippolo ha scritto:


    m[2] di che tipo è?
    poteva essere posta meglio dicendo:
    quale tipo di variabile potrebbe contenere il dato m[2]?
    Ciao Nippolo,
    le tue considerazioni a me sono sembrate tutte corrette. Per un attimo mi ha mandato in confusione il post originario e volevo semplicemente ricondurre la questione in modo più "dozzinale" e accertarmi di comprendere la natura dell'argomento. O ho scritto qualcosa di concettualmente sbagliato.
    Grazie mille, Nippolo, sempre disponibilissimo.

    Un saluto
  • Re: Domanda sulle matrici

    Ciao deckard, in effetti neanche io ho ben capito quale siano precisamente i dubbi di alex989! A tal proposito spero che il codice che ho postato in precedenza possa aiutarlo a fugare qualche dubbio.
Devi accedere o registrarti per scrivere nel forum
9 risposte