Dunque cosa si intende con ``equivaleza di puntatori e vettori'' in C?
Buona parte della confusione che circonda vettori e puntatori in C puo` essere addebitato a una incomprensione di questa affermazione. Dicendo che vettori e puntatori sono ``equivalenti'' significa ne che sono identici e nemmeno che siano intercambiabili.
``Equivalenza'' si riferisce alla seguente definizione chiave:
Un lvalue di tipo vettore-di-T che appare in una espressione decade (com tre eccezioni) in un puntatore al suo primo elemento; il tipo del puntatore risultante e` puntatore-a-T.
(Le eccezioni sono quando il vettore e` l'operando di un operatore sizeof o &, o e` una stringa costante usata per inizializzare un vettore di caratteri.)
Come consequenza di questa definizione, il compilatore non applica l'operatore di indice del vettore [] cosi` differentemente a vettori e puntatori, dopo tutto. In una espressione della forma a[i], il vettore decade in un puntatore, seguendo la regola presentata sopra, ed e` poi indicizzato come sarebbe una variabile puntatore nell'espressione p[i] (sebbene l'effetivo accesso alla memoria sara` differente, come spiegato nella domanda 6.2). Se bisognasse assegnare l'indirizzo del vettore al puntatore:
p = a;allora p[3] e a[3] accederebbero lo stesso elemento.
Vedere anche domanda 6.8.
Riferimenti:
K&R1 Sez. 5.3 pp. 93-6
K&R2 Sez. 5.3 p. 99
ANSI Sez. 3.2.2.1, Sez. 3.3.2.1, Sez. 3.3.6
ISO Sez. 6.2.2.1, Sez. 6.3.2.1, Sez. 6.3.6
H&S Sez. 5.4.1 p. 124
Leggere di seguito: prev prossima su cima
Questa pagina e` di Steve Summit // Copyright 1995 // mail feedback