诚信为本
量力而为
当前位置:ea编程网 EA知识 正文

深入理解MQL4中的参数传递方式

在MQL4编程语言中,参数的传递方式对于函数的使用至关重要。本文将详细介绍两种主要的参数传递方式:值传递和引用传递,并通过示例来解析它们的使用和区别。

值传递

在值传递的方式中,机器语言将参数值复制到函数的形式参数。因此,函数内对此参数的任何更改都不会影响到调用参数。

double ValueMethod(int i, int j) 
  { 
   double res; 
   i *= 2; 
   j /= 2; 
   res = i + j; 
   return(res); 
  }

void OnStart() 
  { 
   int x = 14, y = 8; 
   Print("x and y before call:", x, " ", y); 
   double result = ValueMethod(x, y); 
   Print("x and y after call:", x, " ", y); 
  } 

在这个示例中,即使ValueMethod函数改变了形式参数ij的值,但是实参xy的值在函数调用前后并未改变。

引用传递

引用传递是另一种方法。在这种情况下,参数的引用(而不是其值)被传递给函数参数。在函数内部,它被用来引用调用中指定的实际参数。这意味着参数的改变将影响用于调用函数的参数。

double RefMethod(int &i, int &j) 
  { 
   double res; 
   i *= 2; 
   j /= 2; 
   res = i + j; 
   return(res); 
  }

void OnStart() 
  { 
   int x = 14, y = 8; 
   Print("x and y before call:", x, " ", y); 
   double result = RefMethod(x, y); 
   Print("x and y after call:", x, " ", y); 
  }

在这个示例中,RefMethod函数通过引用传递了xy,函数中对参数的修改导致了xy的值也发生了改变。

值得注意的是,MQL4使用了上述两种方法,但有一种例外:数组、结构类型变量和类对象总是通过引用传递。为了避免实际参数(函数调用时传递的参数)的改变,可以使用const访问说明符。当试图改变用const说明符声明的变量的内容时,编译器将产生错误。

参数的传递顺序

需要注意的是,参数是以逆序的方式传递给函数的,即先计算和传递最后一个参数,然后是倒数第二个参数,以此类推。在括号之后的第一个参数是最后计算和传递的参数。

例如:

void OnStart() 
  { 
   int a[] = {0,1,2}; 
   int i = 0; 
   myFunc(a[i], a[i++], "First call (i = "+string(i)+")"); 
   myFunc(a[i++], a[i], "Second call (i = "+string(i)+")"); 
  } 

void myFunc(int par1, int par2, string comment) 
  { 
   Print(comment, ": par1 = ", par1, "    par2 = ", par2); 
  }

通过理解和应用正确的参数传递方式,可以使我们在使用MQL4编程时写出更加高效和准确的代码。

未经允许不得转载:ea编程网 » 深入理解MQL4中的参数传递方式