Inizializzazione delle Variabili

Ogni variabile può essere inizializzata in fase di definizione. Se una variabile non è inizializzata esplicitamente, il valore memorizzato in questa variabile può essere qualunque. L' inizializzazione implicita non viene utilizzata.

Variabili global e static possono essere inizializzate solo da una costante del tipo corrispondente o un'espressione costante. Le variabili locali possono essere inizializzate da qualsiasi espressione, non solo una costante.

L' inizializzazione delle variabili globali e statiche viene eseguita una sola volta. L' inizializzazione delle variabili locali viene fatta ogni volta che si chiama la funzione corrispondente.

Esempi:

int    n       = 1;
string s       = "hello";
double f[]     = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 };
int    a[4][4] = { {1, 1, 1, 1}, {2, 2, 2, 2}, {3, 3, 3, 3}, {4, 4, 4, 4 } };
//--- dal tetris
int    right[4]={WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_BORDER,
                 WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_BORDER};
//--- inizializzazione di tutti i campi delle strutture con valori zero
MqlTradeRequest request={};

La lista dei valori degli elementi di un array deve essere racchiusa tra parentesi graffe. Le sequenze di inizializzazione perse sono considerate uguali a 0.

Se la dimensione della matrice inizializzata non è specificata, viene determinata da un compilatore, in base alla dimensione della sequenza di inizializzazione.

Esempi:

struct str3
  {
   int               low_part;
   int               high_part;
  };
struct str10
  {
   str3              s3;
   double            d1[10];
   int               i3;
  };
voidOnStart()
  {
   str10 s10_1={{1,0},{1.0,2.1,3.2,4.4,5.3,6.1,7.8,8.7,9.2,10.0},100};
   str10 s10_2={{1,0},{},100};
   str10 s10_3={{1,0},{1.0}};
//---
   Print("1.  s10_1.d1[5] = ",s10_1.d1[5]);
   Print("2.  s10_2.d1[5] = ",s10_2.d1[5]);
   Print("3.  s10_3.d1[5] = ",s10_3.d1[5]);
   Print("4.  s10_3.d1[0] = ",s10_3.d1[0]);
  }

 
Per la variabile di tipo struttura, l'inizializzazione parziale è consentita, così come per gli array statici (con una grandezza implicitamente impostata). È possibile inizializzare uno o più elementi prima di una struttura o un array, gli altri elementi vengono inizializzati con la cifra zero in questo caso.

Vedi anche

Tipi di Dati, Incapsulamento ed Estensibilità dei Tipi, Visibilità Campo di applicazione e Durata delle Variabili, Creazione ed Eliminazione di Oggetti