在MQL4编程语言中,数组是存储多个相同类型数据的重要工具。根据是否预先分配内存,数组可以分为动态数组和静态数组。本文将详细介绍在MQL4中如何声明和使用这两种数组,以及它们在结构体中的应用。
动态数组
在MQL4中,可以声明最多四维的数组。声明动态数组时(第一对方括号中的值未指定),编译器会自动创建上述结构的变量(动态数组对象),并提供正确的初始化代码。当动态数组超出其所声明的块的可见区域时,系统会自动释放相关内存。
例如,我们可以声明一个三维的动态数组matrix
,并通过ArrayResize
函数设定第一维度的大小:
double matrix[][10][20]; // 3维动态数组
ArrayResize(matrix, 5); // 设定第一维度的大小
静态数组
当显式指定所有重要的数组维度时,编译器会预先分配必要的内存大小,这种数组被称为静态数组。尽管如此,编译器还会为动态数组对象分配额外的内存,这个对象与预分配的静态缓冲区(存储数组的内存部分)关联。
创建动态数组对象的目的是可能需要将此静态数组作为参数传递给某个函数。
例如,我们可以创建一个一维的静态数组stat_array
,并将它作为参数传递给some_function
函数:
double stat_array[5]; // 1维静态数组
some_function(stat_array);
...
bool some_function(double& array[])
{
if(ArrayResize(array, 100) < 0) return(false);
...
return(true);
}
结构体中的数组
当在结构体中声明静态数组作为成员时,不会创建动态数组对象,这样做是为了确保与Windows API中使用的数据结构的兼容性。
然而,声明为结构体成员的静态数组也可以传递给MQL4函数。在这种情况下,传递参数时会创建一个动态数组的临时对象。这个对象与结构体成员的静态数组相关联。
总的来说,理解动态和静态数组的声明和使用方式,以及它们在结构体中的应用,对于编写有效的MQL4代码至关重要。