Dubbio puntatori e matrici

di il
4 risposte

Dubbio puntatori e matrici

Salve a tutti ragazzi,ho da poco iniziato a studiare il linguaggio c. se è possibile vorrei esporvi un dubbio che non riesco a risolvere. potreste spiegarmi perche se ho una matrice del tipo
int mat[3][3]

*(mat) è l’indirizzo della cella mat[0][0]?
Cioè vorrebbe dire che mat è l indirizzo della prima riga con l’asterisco accedo alla prima riga e ci trovo l’indirizzo di mat[0][0]? Cioè de primo elemento della prima riga. Grazie a tutti per l'attenzione

4 Risposte

  • Re: Dubbio puntatori e matrici

    CruderDust ha scritto:


    Salve a tutti ragazzi,ho da poco iniziato a studiare il linguaggio c. se è possibile vorrei esporvi un dubbio che non riesco a risolvere. potreste spiegarmi perche se ho una matrice del tipo
    int mat[3][3]

    *(mat) è l’indirizzo della cella mat[0][0]?
    Cioè vorrebbe dire che mat è l indirizzo della prima riga con l’asterisco accedo alla prima riga e ci trovo l’indirizzo di mat[0][0]? Cioè de primo elemento della prima riga. Grazie a tutti per l'attenzione
    Non farla troppo complicata: ogni struttura allocata ha un indirizzo da cui parte (e una dimensione). Semplicemente!
    Quindi quando chiedi l'indirizzo di mat senza specificare una cella ti da l'inizio.
  • Re: Dubbio puntatori e matrici

    nicolap ha scritto:


    CruderDust ha scritto:


    Salve a tutti ragazzi,ho da poco iniziato a studiare il linguaggio c. se è possibile vorrei esporvi un dubbio che non riesco a risolvere. potreste spiegarmi perche se ho una matrice del tipo
    int mat[3][3]

    *(mat) è l’indirizzo della cella mat[0][0]?
    Cioè vorrebbe dire che mat è l indirizzo della prima riga con l’asterisco accedo alla prima riga e ci trovo l’indirizzo di mat[0][0]? Cioè de primo elemento della prima riga. Grazie a tutti per l'attenzione
    Non farla troppo complicata: ogni struttura allocata ha un indirizzo da cui parte (e una dimensione). Semplicemente!
    Quindi quando chiedi l'indirizzo di mat senza specificare una cella ti da l'inizio.

    se faccio mat mi da l'indirizzo della prima riga cioe del primo vettore, se faccio mat[0] mi da l'indirizzo di mat[0][0]. quello che mi è poco chiaro è perche se faccio *(mat) ottengo l'indirizzo di mat[0][0] cioe piu o meno ci sono, però vorrei una spiegazione dettagliata se è possibile
  • Re: Dubbio puntatori e matrici

    Sei cosciente del fatto che le scritture mat[0] e *mat, così come mat[2] e *(mat + 2), sono tra loro equivalenti?
  • Re: Dubbio puntatori e matrici

    Nel caso di una matrice a due dimensioni, come
    
    	int mat[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
    
    la scrittura

    *mat

    rappresenta l'indirizzo della prima riga (che ovviamente corrisponde all'indirizzo del primo elemento). Quindi

    *(mat+1)

    è l'indirizzo della seconda riga e così via.
    Nel caso della matrice precedente, ottieni gli indirizzi delle righe e dei vari elementi per riga
    
    	printf("%X %d %d %d\n", *mat, *(*(mat)), *(*(mat)+1), *(*(mat)+2));
    	printf("%X %d %d %d\n", *(mat+1), *(*(mat+1)), *(*(mat+1)+1), *(*(mat+1)+2));
    	printf("%X %d %d %d\n", *(mat+2), *(*(mat+2)), *(*(mat+2)+1), *(*(mat+2)+2));
    
Devi accedere o registrarti per scrivere nel forum
4 risposte