int a = 7; int b; |
a
è stata definita (inizializzata), mentre b
è stata solo dichiarata; se per qualche motivo ``dimentichiamo'' di assegnare a b
un valore e tentiamo di usare tale variabile, scopriamo che essa contiene un valore arbitrario; errori del genere, provare per credere, non sono facili da eliminare, anche in un programma di dimensioni medio-piccole (200-300 righe). Si è consigliato per questo di creare variabili al momento opportuno, in maniera tale da poterle inizializzare. Il discorso per gli array è però diverso: come si può creare un array ``al momento opportuno'': di solito gli elementi di un array vengono assegnati con dei valori, in momenti diversi del programma mentre la definizione prevede che i valori di tutti gli elementi di un array siano dati nello stesso statement. La soluzione è unica: non definire gli array, piuttosto dichiararli e, immediatamente dopo, mettere a zero tutti gli elementi. In questa maniera ci si copre le spalle nei confronti di un eventuale utilizzo di un elemento senza che esso sia stato assegnato; il procedimento, semplicissimo, è il seguente:
int array[100]; for (int i = 0; i < 100; i++) array[i] = 0; |
tipo nome_array[N] = { val1, val2, ..., valN-1 }; |
// ex6_1_5 #include <iostream.h> void main() { double a[5] = {0, 2.0, 4.0, 6.0, 8.0}; int b[] = {1, 3, 5, 7, 9}; for (int i = 0; i < 5; i++) cout << a[i] << "\t" << b[i] << "\n"; }
output:
0 | 1 | |
2 | 3 | |
4 | 5 | |
6 | 7 | |
8 | 9 |
Si noti che, nel caso si inizializzi un array, non è necessario specificare il numero degli elementi (tanto il compilatore li sa contare ...). Così come per le variabili, anche gli array possono essere dichiarati costanti, ed in tal caso vanno inizializzati, il che è ovvio: visto che l'operazione di assegnamento non è permessa per variabili costanti (e anche per array costanti, essendo essi un insieme di variabili costanti), se non lo si inizializza, come potremmmo mai utilizzare un oggetto di tale tipo? Vediamo un esempio.
// ex6_1_6.cpp #include <iostream.h> void main() { const int pot2[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024}; int esponente; cout << "calcola le potenze intere di due\n" "esponente (max 10)? "; cin >> esponente; if ( (esponente >= 0) && (esponente <= 10) ) cout << pot2[esponente]; }
esempio di output:
calcola le potenze intere di due
esponente (max 10)? 7
128
Abbiamo presentato in questo esempio un metodo molto veloce per calcolare le poteze di due; certo utilizzare lo stesso metodo per tutte le possibili basi (anche solo quelle intere) sarebbe una via del tutto impraticabile.