Ominide 7993 punti

Array e puntatori a confronto


In C c’è una stretta relazione tra gli array e i puntatori, ma anche notevoli differenze. È possibile utilizzare un puntatore usando la notazione array, ma non è possibile usare puntatori come array e viceversa. Le principali difficoltà nel capire le relazioni tra i due tipi di dato sono quelle che riguardano la difficoltà di capire il tipo di oggetto puntato, la semantica delle operazioni aritmetiche eseguibili su puntatori o con puntatori infatti dipende dal tipo di oggetto puntato.

In C non ci sono controlli sul superamento dei limiti di array, perciò può accadere di sovrascrivere la memoria. Il compilatore in questi casi non dà warning per i puntatori, ma li dà per gli array.
Puntatori a int: int A [10]; int *p = A;
Puntatori ad array di int: int A [10]; int (*p )[10] = &A;
Array di puntatori ad int: int *p [10]
Il compilatore trasforma autonomamente le espressioni con notazione array in espressioni con tipo puntatore:
A → *(A+i)
Ci sono diversi modi per esprime un variabile in un array:
p [1] = *( p +1) = *( A+1) = A [1]) e p[0] = 0

= (1-1)

= (x-x)

= (&p -&p)

;
La regola di conversione da notazione array ad espressione aritmetica di tipo puntatore è applicata anche agli array multidimensionali:
A [j] [k] → (*(A+i)) [j] [k] → (*(*(A+i)+j)) [k] → *(*(*(A+i)+j)+k)
di avere righe di diverse lunghezze.
Una dichiarazione di puntatore riserva spazio di memoria per l’oindirizzo dell’oggetto puntato, tranne nel caso in cui l’oggetto puntato sia una stringa letterale, a cui viene riservato spazio di memoria (nel text segment). Non è possibile modificare il contenuto di una stringa letterale se questa è puntata da un puntatore, possiamo però farlo se è utilizzata per inizializzare un array.
Equivalenze tra puntatori e array:
- Nome di array è trattato come un puntatore al primo elemento dell’array dal compilatore
- L’indicizzazione di un elemento di un array è uguale a un’espressione aritmetica con tipo puntatore
- Il nome di un array in una dichiarazione di funzione è trattata come un puntatore al primo elemento dell’array
Differenze tra puntatori e array:
- L’operatore sizeof() agisce in modo diverso
- Non è possibile modificare una stringa letterale se assegnata a un puntatore, ma se assegnata ad un array sì
- Non si può assegnare valori ad una variabile di tipo array, ma si può farlo con variabili puntatore
- Differenze legate alla keyword extern

Hai bisogno di aiuto in Informatica?
Trova il tuo insegnante su Skuola.net | Ripetizioni
Potrebbe Interessarti
×
Registrati via email