从专业人员到超级专业人员的任何问题 - 1。 - 页 3

 
圣洁的简单 (c) 扬-胡斯
 
Sorento:
圣洁的简单 (c) 扬-胡斯

你是什么意思?
 
drknn:

你是什么意思?

这不是那么简单。

现在在函数中--与传递的变量一起工作。

正如数学告诉我们的那样--如果你通过地址传递一个伪变量--其中所有的奇迹都会消失。

但如果地址池是用常数排成的--一切都会不同。

0变成1,反之亦然。

;)

 
为什么在EA/指标/脚本中需要如此复杂的东西,例如按地址传递变量?你说的术语是什么意思:伪变量、地址池和恒定对齐?
 
drknn:
为什么在EA/指标/脚本中需要如此复杂的东西,比如按地址传递变量?你说的术语是什么意思:伪变量、地址池和恒定对齐?

编译器和解释器是相似的。

所以,请想一想。

如何将参数(变量)传递给函数,如果将表达式传递给函数...

;)

 
Sorento:

我也有疑虑。

我不假装是一个超级专业人员,我没有达到专业人员的水平--没有人读消息......这是很清楚的马眼。

但我写的代码越多(到目前为止不多)--就会出现一个问题。

函数中的参数是如何传递的?

(按名称还是按价值?)

我有一个怀疑,字符串变量在传递的时候会出现抖动...

;)


虽然我不认为自己是专家或超级专家,但我会试着回答:)。

MT是用C2C++实现的,开发人员建议在有任何不确定的情况下参考该语言的标准。

根据C2C++标准,除数组外的所有参数都是以值传递的,包括表达式。也就是说,参数的副本被传递:在一个被调用的函数 内改变一个以值传递的参数,不会导致外部调用函数中的参数被改变。如果需要改变,必须通过引用(通过地址)来传递,即传递作为参数传递的变量所在的地址。那么位于这个地址的值可以被改变,地址不能被改变。所有的数组都是通过引用传递的,也就是说,地址是立即传递的:否则,大量的数据将不得不在堆栈中复制。

为了防止通过引用传递的参数在被调用的函数中被改变,C/C++使用const 修饰符。

在C2C++中,字符串是字符数组,但有一点不同:这样的数组必须以字符串终止符'\0'结束。

在MCL中,字符串是一个包含字符串大小和指针的结构(即字符串数组本身),如果这些例子是可信的。

这个例子是针对C2C++的。

//----
struct MqlStr
  {
   int               len;
   char             *string;
  };

这里char *是一个指向字符类型(char类型)变量的指针。指针类型本身(char*, int*, double*.......)总是一个整数--它是一个单元地址。这意味着该变量不是存储一个字符串,而是一个单元格地址。字符本身的值可以像这样被检索。*字符串或字符串[0]。为了工作,我们应该总是为一个数组分配内存,除非它是静态排列的,即它的大小没有在描述中指定,如

char string[1025] ;

是一个字符数组,有1025个元素....。如果最后一个字符(string[1024]='\0'),数组可以被视为一个1024个字符的字符串。

字符串元素可以作为通常的数组string[i]的元素被接收。当动态放置时,一个字符串被分配+1个元素,字符串结尾的最后一个字符是......

因此,字符串总是通过引用来传递。是否禁止修改它取决于ICL的实现,可以用例子来检查:把一个字符串传给函数,在那里改变值,并在被调用的函数结束后读取它(这个值)。

好运。

 
VladislavVG:

因此,字符串总是通过引用来传递。它们是否可以被修改取决于MCL的实现,可以用一个例子来检查:把一个字符串传给一个函数,在那里改变数值,并在被调用的函数结束后读取它(这个数值)。

不禁止修改。已检查。
 
drknn:

哦,胡说八道。这一定是开发人员的问题,或者DLL中的一切都不对。我不是一个C++程序员--曾经试着做了几个程序,但我遇到过,当你安装了C++外壳时,一切都能正常工作。但是当你把可执行文件转移到另一台电脑上时,你会立即注意到缺少一些dll-cycle。我也不喜欢和弦子一起工作。我放弃了那门语言,而选择了Delphi。也许你可以尝试在上面制作你的dll--这样的dll在终端是很正常的...

P.S.

因此,我不明白为什么每个人都如此赞扬C++,如果甚至在选择外壳进行编程的层面上,这种语言都会出现问题......

问题是,如果你在图表上手动加载这些库和脚本,它们都能正常工作。如果你从当前进程中以编程方式将它们加载到图表上,它们也可以工作。

当你从一个远程进程加载它们时,问题就发生了。

=====================================

关于将代码转移到另一台电脑上。最有可能的是你正在迁移一个调试器版本。它从Studio中提取调试库。你应该已经编译好了版本。那么所有的东西都会在各地发挥作用。

 
我错了,我叫它类比。
 
TheXpert:
我错了,我叫它类比。

对。我甚至对这个主题的标题条款眨了眨眼--我没有注意到名字是不同的--我的注意力已经被调到一个特定的模式。