Question 6.4

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