一、概述
在MQL4编程中,对数组的操作是非常常见的,而判断数组是否为动态数组则是一个基础但至关重要的步骤。本文将详细介绍ArrayIsDynamic
函数的用法,并通过实例演示来加深理解。
二、函数定义与参数
ArrayIsDynamic
函数的定义如下:
bool ArrayIsDynamic(
const void& array[] // 待检查数组
);
- 参数:
array[]
,输入参数,表示需要检查的数组。 - 返回值:如果选定的数组是动态的,则返回true,否则返回false。
三、实例演示
下面的示例代码展示了如何使用ArrayIsDynamic
函数来检查不同类型的数组是否为动态数组:
#property description "本指标不计算值。它尝试对三个数组:动态数组、静态数组和指标缓冲区应用ArrayFree()函数。结果显示在Experts日志中。"
//--- 指标设置
#property indicator_chart_window
#property indicator_buffers 1
//--- 全局变量
double ExtDynamic[]; // 动态数组
double ExtStatic[100]; // 静态数组
bool ExtFlag=true; // 标志
double ExtBuff[]; // 指标缓冲区
int OnInit()
{
ArrayResize(ExtDynamic,100); // 为动态数组分配内存
SetIndexBuffer(0,ExtBuff);
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
return(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
if(ExtFlag)
{
Print("+============================+");
检查数组(ExtDynamic, "动态数组");
检查数组(ExtStatic, "静态数组");
检查数组(ExtBuff, "指标缓冲区");
ExtFlag=false;
}
return(rates_total);
}
void 检查数组(double& array[], string name) {
Print(name + ":");
Print("释放内存前大小 = ", ArraySize(array));
Print("这是一个动态数组吗 = ", ArrayIsDynamic(array) ? "是" : "否");
ArrayFree(array);
Print("释放内存后大小 = ", ArraySize(array));
}
在此代码中,我们创建了一个动态数组、一个静态数组和一个指标缓冲区,并使用ArrayIsDynamic
函数逐一检查这些数组是否为动态数组,然后释放数组内存,最后查看并打印释放内存后的数组大小。
四、结论
ArrayIsDynamic
函数为我们提供了一种简便的方法,用于判断数组是否为动态数组,这在很多情况下都是非常实用的。了解并熟练运用这一函数,将有助于我们更加灵活高效地进行MQL4编程。