Puntatori

di il
4 risposte

Puntatori

Salve a tutti,
ho un problema che non riesco a risolvere. Stamattina a lezione il prof ha parlato di puntatori. In particolare ha parlato di puntatore=vettore e che è possibile "trattare" i puntatori come se fossero matrici. La cosa non mi è sembrata molto chiara. Qualcuno è così gentile da spiegarmi meglio questo concetto e da darmi qualche dritta su come affrontare il seguente problema?. Penso che si possa affrontare con i puntatori. Grazie.

Un’applicazione per la compressione di testi funziona in questo modo:
• Dato un file di testo, l’applicazione individua anzitutto un’insieme di parole del testo (tipicamente lunghe e ripetute) che verranno poi elaborate come segue.
• A ciascuna delle parole dell’insieme così costruito viene associato un intero univoco, con valore sempre compreso nell’intervallo [0 – 99]. L’applicazione riporta in un secondo file di testo ogni associazione intero/parola (una per riga).
• Nel file di testo originale, infine, ogni parola che appartiene all’insieme viene sostituita dall’intero ad essa associato (preceduto dal carattere ‘$’).
Si desidera un programma C che, dati due file (il file di testo trasformato e il corrispondente file delle associazioni), ricostruisca il file di testo originale. Si può assumere che ogni riga del file “compresso” sia lunga al più 80 caratteri.

4 Risposte

  • Re: Puntatori

    Ciao Pinuzzo,

    ti rispondo solo alla prima domanda: array e puntatori.
    L'array e' per definizione un'area di memoria contigua. Quando definisci un array il compilatore alloca la memoria necessaria per contenere tutti gli elementi e ti rilascia un puntatore al primo elemento. La cosa non e' molto trasparente. Analizziamo questa definizione:
    int a[100];
    la variabile a e' un puntatore al primo elemento del blocco dei cento interi. Dire a[0] equivale *(a+0), a[1] == *(a+1)... etc.
    a e' un indirizzo e le operazioni matematiche sono riferite alla grandezza del tipo. Se un int e' 4 byte incrementando con a+1 aumentiamo l'indirizzo di 4... ecco che facilmente scorriamo il vettore

    aggiungo che nelle allocazioni dinamiche questo meccanismo e' piu' chiaro ma identico nel concetto
  • Re: Puntatori

    Ma se ad esempio io avessi una stringa di caratteri e volessi modificarne il contenuto a metà(per esempio) posso agire anche senza utilizzare i puntatori?..cioè posso utilizzare un ciclo for che faccio partire dalla posizione in cui voglio iniziare la modifica e pian piano sostituisco i vari caratteri?
  • Re: Puntatori

    La stringa di caratteri e' un array . Se usi il formato:
    s='x' equivale a *(s+i)='x'
    stessa identica cosa dell'esempio precedente, con:
    char s[128];
    s contiene l'indirizzo al primo elemento (dei 128) dell'array di char

    Insomma.. nel C i puntatori sono presenti ovunque anche se a volte non sembra
    
    for (i=0;*(s+i);i++)
       s[i]='x';
    
  • Re: Puntatori

    Ok grazie mille
Devi accedere o registrarti per scrivere nel forum
4 risposte