诚信为本
量力而为
当前位置:峰汇在线 ea编程知识 正文

如何判断数组是否为动态

一、概述

在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编程。

版权所有转载请注明标题及链接:峰汇在线 » 如何判断数组是否为动态