Successivo: Indici non inizializzati, Precedente: Fondamenti sui vettori, Su: Vettori [Contenuti][Indice]
Un aspetto importante da ricordare riguardo ai vettori è che
gli indici dei vettori sono sempre stringhe.
Quando un valore numerico è usato come indice,
viene convertito in un valore di tipo stringa prima di essere usato per
l’indicizzazione (vedi la sezione Conversione di stringhe e numeri).
Ciò vuol dire che il valore della variabile predefinita CONVFMT
può
influire su come un programma ha accesso agli elementi di un vettore.
Per esempio:
xyz = 12.153 dati[xyz] = 1 CONVFMT = "%2.2f" if (xyz in dati) printf "%s è in dati\n", xyz else printf "%s non è in dati\n", xyz
Il risultato è ‘12.15 non è in dati’. La prima istruzione dà a
xyz
un valore numerico. L’assegnamento a dati[xyz]
indicizza dati
col valore di tipo stringa "12.153"
(usando il valore di conversione di default CONVFMT
, "%.6g"
).
Quindi, all’elemento del vettore dati["12.153"]
è assegnato il valore
uno. Il programma cambia poi
il valore di CONVFMT
. La verifica ‘(xyz in dati)’ genera un nuovo
valore di stringa da xyz
— questa volta "12.15"
— perché il
valore di CONVFMT
consente solo due cifre decimali. Questa
verifica dà esito negativo, perché "12.15"
è diverso da "12.153"
.
Secondo le regole di conversione
(vedi la sezione Conversione di stringhe e numeri), i valori numerici interi
vengono convertiti in stringhe sempre come interi, indipendentemente dal
valore che potrebbe avere CONVFMT
. E infatti il caso
seguente produce il risultato atteso:
for (i = 1; i <= maxsub; i++) fa qualcosa con vettore[i]
La regola “i valori numerici interi si convertono sempre in stringhe intere”
ha un’altra conseguenza per l’indicizzazione dei vettori.
Le costanti ottali ed esadecimali
(vedi la sezione Numeri ottali ed esadecimali)
vengono convertite internamente in numeri, e la loro forma originale
non viene più ricordata. Ciò significa, per esempio, che
vettore[17]
,
vettore[021]
e
vettore[0x11]
fanno riferimento tutti allo stesso
elemento!
Come molte cose in awk
, molto spesso le cose
funzionano come ci si aspetta. È utile comunque avere una
conoscenza precisa delle regole applicate, poiché a volte possono avere
effetti difficili da individuare sui programmi.
Successivo: Indici non inizializzati, Precedente: Fondamenti sui vettori, Su: Vettori [Contenuti][Indice]