Question 6.17

Questo e` un bel trucco: se si scrive

	int realarray[10];
	int *array = &realarray[-1];
si puo` trattare array come se fosse un vettore basato-1.


Sebbene questa tecnica e` attraente (ed e` statu usata in vecchie edizioni del libro Numerical Recipes in C), non e` conforme agli standard del C. L'aritmetica dei puntatori e` definita solo nella misura in cui il puntatore punta dentro lo stesso blocco allocato di memoria, o all'immaginario elemento ``terminante'' una posizione oltre; altrimenti, il comportamento e` indefinito, anche se il puntatore non e` dereferenziato. The codice sopra potrebbe fallire se, mentre sottraendo l'offset, un indirizzo illegale fosse generateto (magari perche` l'indirizzo tenta di ``girare attorno'' oltre l'inizio di qualche segmento di memoria).

Riferimenti: K&R2 Sez. 5.3 p. 100, Sez. 5.4 pp. 102-3, Sez. A7.7 pp. 205-6
ANSI Sez. 3.3.6
ISO Sez. 6.3.6
Rationale Sez. 3.2.2.3


Leggere di seguito: prev prossima su cima


Questa pagina e` di Steve Summit // Copyright 1995 // mail feedback