Descargar MetaTrader 5

Inicialización de variables

Cualquier variable puede ser inicializada durante la definición. Si la variable no es inicializada explícitamente, el valor almacenado en esta variable puede ser cualesquiera. La inicialización implícita no se realiza.

Las variables globales y estáticas pueden ser inicializadas sólo por la constante del tipo correspondiente o por una expresión constante. Las variables locales pueden ser inicializadas por cualquier expresión, y no sólo por una constante.

La inicialización de las variables globales y estáticas se realiza sólo una vez. La inicialización de las variables locales se realiza cada vez al llamar a la función correspondiente.

Ejemplos:

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 } };
//--- de tetris
int    right[4]={WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_BORDER,
                 WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_BORDER};
//--- inicialización de todos los campos de la estructura con valores cero
MqlTradeRequest request={0};

La lista de valores de los elementos del array tiene que encerrarse dentro de las llaves. Las sucesiones inicializadoras perdidas se consideran iguales a 0. En la secuencia que inicializa tiene que haber por lo menos un valor: este valor inicializa el primer elemento de la estructura correspondiente o del array, los elementos que faltan se consideran iguales a cero.

Si el tamaño del array inicializado no está especificado, éste es determinado por el compilador basándose en el tamaño de la sucesión inicializadora. Los arrays multidimensionales no pueden ser inicializados por una sucesión unidimensional (por una sucesión sin llaves adicionales), excepto el caso, cuando se especifica sólo un elemento inicializador (cero, por regla general).

Los arrays (incluso aquellos que hayan sido declarados a nivel local) pueden ser inicializados sólo por las constantes.

Ejemplos:

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 las variables del tipo de estructuras se permite una inicialización parcial, lo mismo se refiere a los arrays estáticos (con un tamaño fijado explícitamente). Se puede inicializar uno o varios primeros elementos de la estructura o array, el resto de los elementos en este caso serán inicializados con ceros.

Véase también

Tipos de datos, Encapsulación y extensión de tipos, Visibilidad y tiempo de vida de variables, Creación y eliminación de objetos


Actualizado: 2015.12.03