Puntatore ad array (puntatore a riga)

di il
42 risposte

Puntatore ad array (puntatore a riga)

Buongiorno,

non riesco a capire quale sia l'utilità del puntatore ad array. Con puntatore ad array intendo proprio puntatore a riga, non puntatore al primo elemento dell'array.
C'è qualcuno che sa perché esista e quale utilità potrebbe avere?

Grazie in anticipo

42 Risposte

  • Re: Puntatore ad array (puntatore a riga)

    Spiegati meglio. Usare termini tecnici a casaccio non rende la frase comprensibile.
    Stai parlando di array nel senso di vettore? matrice? tensore? array di array? array di putatori?
    A quale struttura dati stai pensando? Ce ne sono molte che usano un array come struttura dati di servizio.
  • Re: Puntatore ad array (puntatore a riga)

    Infatti ... spiega cosa è per te un "puntatore a riga" altrimenti non si sa di cosa parliamo...
  • Re: Puntatore ad array (puntatore a riga)

    Ok, cercherò di essere più chiaro. Mi spiegherò tramite un esempio.
    Definisco un array in questo modo:

    int vettore[3] = {1, 2, 3};

    Ora: vettore, che è il nome dell'array, è un puntatore costante al primo elemento dell'array. Infatti risulta *vettore == 1 e anche vettore[0] == 1.&vettore invece è un puntatore all'array, e numericamente coincide con il contenuto di vettore (l'array e il suo primo elemento hanno lo stesso indirizzo) ma ha tipo diverso (puntatore ad array, o puntatore a riga, mente vettore è un puntatore a int). Un puntatore ad array lo potrei pure definire in questo modo:

    int (*pun)[3]; //puntatore ad array di tre elementi

    e inizializzarlo per esempio così;

    pun = &vettore; //come dicevo prima, &vettore è un puntatore all'array di nome vettore

    Il fatto è che non ho proprio capito l'utilità del puntatore ad array (o a riga, che dir si voglia).

    Grazie
  • Re: Puntatore ad array (puntatore a riga)

    Non e' una questione di a che serve, ma piu' banalmente una questione di generalita'.

    Se T e' un qualunque tipo valido in C/C++, e t una variabile di tipo T, &t e' un puntatore a t ed ha tipo T*.

    A che servono i puntatori? Banalmente quando devi allocare delle strutture dati di cui non conosci l'esatta dimensione a compile time, e quindi devi usare i vari malloc/free o new/delete.

    Ora, che in C/C++ non ci sia una chiara distinzione tra puntatore ad un oggetto e un array, e' solo una questione storica.
  • Re: Puntatore ad array (puntatore a riga)

    Prova a scrivere un controllo textbox poi mi sai dire a cosa servono i puntatori ai vettori.....
    Ma anche il contenuto di una directory è adatto al puntatore a vettori, infatti il nome di solito è una lungheza fissa mentre il quantitativo dei file no!
    Quindi in tutti quesi casi in cui si hanno delle (colonne fisse e righe variabili) (ma non è una regola) si usa un puntatore a vettori.
  • Re: Puntatore ad array (puntatore a riga)

    migliorabile ha scritto:


    Non e' una questione di a che serve, ma piu' banalmente una questione di generalita'.

    Se T e' un qualunque tipo valido in C/C++, e t una variabile di tipo T, &t e' un puntatore a t ed ha tipo T*.
    Beh ma per la generalità &vettore dovrebbe essere un puntatore a puntatore a intero, visto che il nome dell'array (che è vettore) è un puntatore a intero.
  • Re: Puntatore ad array (puntatore a riga)

    vbextreme ha scritto:


    Prova a scrivere un controllo textbox poi mi sai dire a cosa servono i puntatori ai vettori.....
    Ma anche il contenuto di una directory è adatto al puntatore a vettori, infatti il nome di solito è una lungheza fissa mentre il quantitativo dei file no!
    Quindi in tutti quesi casi in cui si hanno delle (colonne fisse e righe variabili) (ma non è una regola) si usa un puntatore a vettori.
    Sinceramente non ho capito.
  • Re: Puntatore ad array (puntatore a riga)

    Io, sinceramente, non ho ancora capiti quale sia il tuo dubbio.
  • Re: Puntatore ad array (puntatore a riga)

    @Autoditatta esercizio semplice:
    Preleva da input una matrice di cui le colonne corrispondano ad un nome di massimo 80 caratteri non è dato sapere a priori il numero di nomi inserito dall utente.

    Avanzato:
    Riordinare la matrice in ordine alfabetico.
  • Re: Puntatore ad array (puntatore a riga)

    oregon ha scritto:


    Io, sinceramente, non ho ancora capiti quale sia il tuo dubbio.
    Il mio non è un dubbio, è una mancata comprensione. Che l'istruzione:
    int (*vett)[3];
    definisca un puntatore ad array ne sono certo. Quello che non ho capito è il perché sia possibile definire un puntatore ad array, quale sia la sua utilità, visto che non è possibile accedere agli elementi dell'array puntato tramite la dereferenziazione del puntatore stesso, né è possibile inizializzare un altro array dereferenziando l'array puntato da vett. Se faccio:
    int arr[3] = *vett;
    il compilatore mi dà errore (uso Eclipse su Linux).
  • Re: Puntatore ad array (puntatore a riga)

    Fai l esercizio che ti ho detto cosi capisci in quattro e quatrotto.

    o forse devi studiare ancora un pò, i puntatori a volte possono essere ostici
  • Re: Puntatore ad array (puntatore a riga)

    Autodidatta ha scritto:


    una mancata comprensione
    Cioè, tu non capisci perché esistano e a cosa servano i puntatori in C .. corretto?
    ... non è possibile accedere agli elementi dell'array puntato tramite la dereferenziazione del puntatore stesso
    Come no? Puoi accedere a qualsiasi elemento tramite il puntatore all'array ...
    né è possibile inizializzare un altro array dereferenziando l'array puntato da vett.
    Devi copiare elemento per elemento, con un ciclo o con la memcpy ...

    Probabilmente devi studiare meglio l'argomento puntatori senza dare "sentenze" definitive sulla loro utilità ...
  • Re: Puntatore ad array (puntatore a riga)

    vbextreme ha scritto:


    fai l esercizio che ti ho detto cosi capisci in quattro e quatrotto.

    o forse devi studiare ancora un pò, i puntatori a volte possono essere ostici
    Lo farei con una lista il cui elemento è costituito da una stringa di 80 caratteri e da un puntatore all'elemento stesso, in modo da poter inserire a tempo di esecuzione tutti i nomi che voglio (nei limiti della memoria fisica, ovviamente). Non mi viene in mente come farlo in altro modo.
  • Re: Puntatore ad array (puntatore a riga)

    Studia ancora un pò vedrai che li capirai, nel frattempo usa un'astronave intergalattica per portare il patume dentro al cassonetto...
Devi accedere o registrarti per scrivere nel forum
42 risposte