跳至内容

Initialization of Variables

变量的初始化

任何变量都可以在定义期间进行初始化。如果变量没有显式初始化,则存储在该变量中的值可以是任意值。不会使用隐式初始化。

全局变量静态变量只能通过相应类型的常量或常量表达式进行初始化。局部变量可以通过任何表达式进行初始化,而不仅仅是常量。

全局和静态变量的初始化只进行一次。局部变量的初始化每次调用相应函数时都会进行。

示例:

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 } };
//--- from tetris
int    right[4]={WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_BORDER,
                 WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_BORDER};
//--- initialization of all fields of the structure with zero values
MqlTradeRequest request={0};

数组元素的列表必须用花括号括起来。未初始化的序列被视为等于0。初始化序列必须至少有一个值:该值被初始化为相应结构或数组的第一个元素,缺失的元素被视为零。

如果未指定初始化数组的大小,则由编译器根据初始化序列的大小确定。多维数组不能通过一个一维序列进行初始化(没有额外花括号的序列),除非只指定了一个初始化元素(通常为零)。

数组(包括在局部级别声明的数组)只能通过常量进行初始化。

示例:

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]);
  }

对于结构类型变量,允许部分初始化,对于静态数组也是如此(具有隐式设置的大小)。可以初始化结构或数组的一个或多个第一个元素,在这种情况下其他元素将用零初始化。

另请参阅

数据类型类型的封装和扩展性变量的可见性范围和使用寿命创建和删除对象

最后更新于