Puntatore di puntatore

di il
25 risposte

25 Risposte - Pagina 2

  • Re: Puntatore di puntatore

    Tutto questo è dovuto al fatto che in realtà un array bidimensionale è un array semplice con gli elementi tra una riga e l'altra una dopo l'altra?
  • Re: Puntatore di puntatore

    Te l'ho già detto nella prima risposta ...

    Se devi usare un doppio puntatore, ripeto, allora l'esercizio e il tuo professore vogliono che tu usi l'allocazione dinamica.
    Devi allocare un vettore di puntatori e, per ogni puntatore, una riga di valori.
  • Re: Puntatore di puntatore

    gmgigi ha scritto:


    Tutto questo è dovuto al fatto che in realtà un array bidimensionale è un array semplice con gli elementi tra una riga e l'altra una dopo l'altra?
    Grosso modo sì. Per chiariti le cose, un'immagine delle volte vale più di mille parole

  • Re: Puntatore di puntatore

    Solo che in questa rappresentazione sembra che esista qualcosa che si chiami x x[0] e x[1] e che siano 3 "contenitori" diversi esistenti e contenenti degli indirizzi.

    In realtà non esistono.

    Quello che c'è è solamente un "nome" (ovvero x) che rappresenta un indirizzo in sola lettura da cui si possono calcolare gli alti.

    Questa sembra invece la rappresentazione del doppio puntatore che punta ad un vettore di puntatori allocati dinamicamente, a loro volta puntanti ad un vettore di valori (sebbene non serva che siano in memoria in modo contiguo).
  • Re: Puntatore di puntatore

    oregon ha scritto:


    Solo che in questa rappresentazione sembra che esista qualcosa che si chiami x x[0] e x[1] e che siano 3 "contenitori" diversi esistenti e contenenti degli indirizzi.

    In realtà non esistono.

    Quello che c'è è solamente un "nome" (ovvero x) che rappresenta un indirizzo in sola lettura da cui si possono calcolare gli alti.

    Questa sembra invece la rappresentazione del doppio puntatore che punta ad un vettore di puntatori allocati dinamicamente, a loro volta puntanti ad un vettore di valori (sebbene non serva che siano in memoria in modo contiguo).
    Se la metti così potrebbe essere un po' fuorviante. E' chiaro che x[0] ed x[1] non esistono o meglio non sono contenitori diversi che esistono e contengono degli indirizzi. Effettivamente ora se ci penso dal grafico uno potrebbe intendere che x è un doppio puntatore.

    L'ho presa da qui: paragrafo "Multidimensional arrays".

    E' descritta come la rappresentazione in menoria di static int x[2][3] = {{3, 6, 9},{4, 8, 12}};
  • Re: Puntatore di puntatore

    Se posso dire la mia, concordo con Oregon sul fatto che l'esercizio fa intendere tu debba allocare dinamicamente la matrice come doppio puntatore: vettori di puntatori, di cui ognuno punta a un vettore di valori...
    L'immagine rappresenta una matrice allocata dinamicamente con doppio puntatore...
  • Re: Puntatore di puntatore

    Nanni16 ha scritto:


    L'immagine rappresenta una matrice allocata dinamicamente con doppio puntatore...
    Non è detto, può rappresentare anche l'altro caso. È fuorviante ok, ma da dove l'ho presa viene intesa come un static int x[2][3] = {{3, 6, 9},{4, 8, 12}};, che è altra cosa da un'allocazione dinamica.
  • Re: Puntatore di puntatore

    Molto confuso e praticamente sbagliato. Quando dice

    Alternatively, a pointer to a pointer can be used instead of a multidimensional array, declared as int **y

    intende dire che, al posto dell'array allocato staticamente, puoi usare un doppio puntatore (allocando l'array dinamicamente) ...

    Fra l'altro, il codice che potrebbe fare comprendere non c'è. Mi riferisco a

    int **imatrix(int n, int m);

    che dovrebbe essere l'allocazione dinamica dell'array con restituzione del doppio puntatore (quello che suggerivo di fare).
  • Re: Puntatore di puntatore

    Non è detto, può rappresentare anche l'altro caso.
    Non può perché presuppone quelle "caselline" dove inserisce x e x[0] x[1] intendendo che siano puntatori.
    Se fossero puntatori potrei anche modificarli. Prova a modificare x oppure x[0] x[1]
  • Re: Puntatore di puntatore

    oregon ha scritto:


    Non è detto, può rappresentare anche l'altro caso.
    Non può perché presuppone quelle "caselline" dove inserisce x e x[0] x[1] intendendo che siano puntatori.
    Se fossero puntatori potrei anche modificarli. Prova a modificare x oppure x[0] x[1]
    Si questo è vero non puoi modificarli chiaramente. Boh, vi ripeto dato che dal documento dice che quella è la rappresentazione di static int x[2][3] = {{3, 6, 9},{4, 8, 12}};, immagino che sia una mera semplificazione grafica. Sono d'accordo con te che x[0] e x[1] non esistono in realtà come contenitori di indirizzi. Tra l'altro se alla funzione deve passare un doppio puntatore, anche io gli ho suggerito di usare l'allocazione dinamica.
  • Re: Puntatore di puntatore

    @gmgigi

    Volevo chiederti se puoi mostrare il codice che, in fine, hai inteso adottare.

    Grazie.
Devi accedere o registrarti per scrivere nel forum
25 risposte