Qualquer variável pode ser inicializada durante a definição. Se uma variável não é inicializada explicitamente, o valor armazenado nesta variável pode ser qualquer coisa. Inicialização implícita não é usada.
Variáveis globais e estáticas podem ser inicializadas uma vez por uma constante do tipo correspondente ou uma expressão constante. Variáveis locais podem ser inicializados por qualquer expressão, não apenas por uma constante.
A inicialização de variáveis globais e estáticas é realizada apenas uma vez. A inicialização de variáveis locais é feita toda a vez que se chama as funções correspondentes.
Exemplos:
int n = 1;
string s = "Olá";
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 } };
//--- de tetris
int right[4]={WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT _BORDER,
WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_B ORDER};
//--- inicialização de todos os campos da estrutura com valores zero
MqlTradeRequest request={0};
A lista de valores dos elementos de um array devem estar entre chaves. Seqüências de inicializações faltantes são consideradas iguais a 0. A seqüência de inicialização deve ter ao menos um valor: este valor é inicializado para o primeiro elemento da estrutura correspondente ou array, elementos faltantes são considerados iguais a zero.
Se o tamanho do array inicializado não é especificado, ele é determinado pelo compilador, baseado no tamanho da seqüência de inicialização. Arrays multi-dimensionais não podem ser inicializados por uma seqüência unidimensional (uma seqüência sem chaves adicionais), exceto para o caso quando apenas um elemento inicializante é especificado (zero, como regra).
Arrays (incluindo aqueles declarados no nível local) podem ser inicializados apenas por constantes.
Exemplos:
struct str3
{
int low_part;
int high_part;
};
struct str10
{
str3 s3;
double d1[10];
int i3;
};
void OnStart()
{
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},{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]);
}
Para variável de tipo estrutura, inicialização parcial é permitida, bem como para arrays estáticos. Pode-se inicializar um ou mais primeiros elementos de uma estrutura ou array, os demais elementos serão inicializados com zeros neste caso.