Question 6.3

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