Perche` le dichiarazioni di vettori e di puntatori sono intercambiabili come parametri formali di funzioni?
Si suppone che sia conveniente.
Dal momento che i vettori decadono immediatamente in puntatori, un vettore no e` mai realmente passato a una funzione. Permettere che i parameteri puntatori siano dichiarati come vettori e` sempicemente un modo di fare apparire come se il vettore fosse passato. Un programmatore puo` desiderare di enfatizzare che un parametro e` tradizionalmente trattato come se fosse un vettore, o che un vettore (strettamente parlando, l'indirizzo) e` tradizionalmente passato. Per convenienza, dunque, ogni dichiarazione di parametri che ``sembri'' un vettore, es.
f(a) char a[]; { ... }e` trattata dal compilatore come se fosse un puntatore, dal momento che e` cio` che la funzione riceve se viene passato un vettore:
f(a) char *a; { ... }Questa conversione vale solo entro le dichiarazioni di parametri formali di funzioni, da nessuna altra parte. Se la conversione infastidisce, si puo` evitarla; molti hanno concluse che la confusione che causa oscura il piccolo vantaggio di avere la dichiarazione che ``appare come'' la chiamata o gli usi dentro la funzione.
Vedere anche domanda 6.21.
Riferimenti:
K&R1 Sez. 5.3 p. 95, Sez. A10.1 p. 205
K&R2 Sez. 5.3 p. 100, Sez. A8.6.3 p. 218, Sez. A10.1 p. 226
ANSI Sez. 3.5.4.3, Sez. 3.7.1, Sez. 3.9.6
ISO Sez. 6.5.4.3, Sez. 6.7.1, Sez. 6.9.6
H&S Sez. 9.3 p. 271
CT&P Sez. 3.3 pp. 33-4
Leggere di seguito: prev prossima su cima
Questa pagina e` di Steve Summit // Copyright 1995 // mail feedback