mql5语言的特点、微妙之处以及技巧 - 页 161 1...154155156157158159160161162163164165166167168...247 新评论 Igor Makanu 2020.01.26 21:21 #1601 printf("%s , %f , %i",(string)NULL,(double)NULL,(int)NULL); 2020.01.27 01:15:57.859 tst (EURUSD,H1) (null) , 0.000000 , 0 如果我取消类型转换,"NULL"--"void "类型的表达是非法的。 有趣的是,事实证明,nput字符串可以被初始化为void Maxim Kuznetsov 2020.01.26 21:23 #1602 fxsaber: NULL是初始化。这个例子特意显示了一个非输入字符串。 NULL / NIL(换句话说)不能成为一个常量字符串实体的初始化。 至少因为mql字符串不像C语言那样是一个 "指针"。它没有 "一无所有 "的特殊状态。 PS(哦,我没料到自己会这样)。 fxsaber 2020.01.26 21:26 #1603 Maxim Kuznetsov: 她没有 "一无所有 "的特殊状态 关于交易、自动交易系统和交易策略测试的论坛 mql5的特殊性,技巧和窍门 fxsaber, 2020.01.26 15:54 void OnStart() { uchar Bytes[]; Print(StringToCharArray(NULL, Bytes)); // 0 Print(StringToCharArray("", Bytes)); // 1 } 我每天都在使用这个条件。 Igor Makanu 2020.01.26 21:27 #1604 Maxim Kuznetsov: 至少因为mql字符串不像C语言那样是一个 "指针"。它没有 "一无所有 "的特殊状态。 PS(哦,我没料到自己会这样)。 可惜没有,MQL中的字符串是一个有分配内存的实体。@Ilyas 解释了为什么StringBufferLen()可能不显示字符串的长度,而是显示用来存储字符串的内存。 fxsaber: 我每天都在使用这个条件。 这根本不是什么指标,在MQL4中,我使用StringConcatenate()取消对任何对象的指针,也就是说,内置函数的工作不是由MQL规则实现的))。 input string s = NULL; void OnStart() { uchar Bytes[]; Print(StringToCharArray(NULL, Bytes)); // 0 Print(StringToCharArray("", Bytes)); // 1 Print(StringToCharArray(s, Bytes)); // 1 } fxsaber 2020.01.26 21:35 #1605 Igor Makanu: 这根本不是什么指标,我在MQL4中使用StringConcatenate()取消了对任何对象的指针,也就是说,内置函数不是由MQL规则实现的)) 里面的东西没有任何区别。 关于交易、自动交易系统和策略测试的论坛 mql5的特殊性,技巧和窍门 Igor Makanu, 2020.01.26 22:27 input string s = NULL; void OnStart() { uchar Bytes[]; Print(StringToCharArray(s, Bytes)); // 1 } 因为它不是NULL。这就是原始信息的内容。 Igor Makanu 2020.01.26 21:41 #1606 fxsaber: 里面的情况如何并无区别。 用你的例子补充了我的帖子 我还做了几个实验,输入字符串s = NULL。 据我所知,当我们没有试图使用输入变量的值时,它将是NULL,但当我们试图给另一个变量赋值或简单地取消它时,NULL将消失,即内存 将被分配 给这个输入变量。 fxsaber 2020.01.26 21:41 #1607 Igor Makanu: 据我所知,当我们不试图使用一个输入变量的值时--这个值是NULL,但是在那个时候,如果我们试图把这个输入变量的值分配给另一个变量,或者干脆取消这个输入变量,那么这个NULL就会消失,即内存会被分配 给这个输入变量。 上面已经详细介绍了输入变量的运行机制。 Maxim Kuznetsov 2020.01.26 22:00 #1608 fxsaber: 里面的东西没有任何区别。 因为它不是NULL。这就是原始信息的内容。 实体解读的特殊性(在mql中没有指针,它不是C语言,让它有实体)。 input是一个在启动时声明的常量,你不能在物理上给它 "NULL "的值。 const string nothing=NULL; /// <--- ЭТО ЧТО ? Roman 2020.01.27 00:04 #1609 Nikolai Semko: 是的,这种行为可能只是 "万无一失"。 显然,由于输入变量 必须被初始化,=NULL 被人为地等同于="", 而该变量已经在内存中占据了至少一个字节。 在MQL5中的条目。 是绝对相同的。没有为该变量分配内存。总之,我没有发现任何差异。 例如,在java中,这种记录略有不同,尽管在这两种情况下也没有为变量分配内存。第一个变量(String str = null;)将被视为初始化,尽管没有为变量分配内存,而且变量可以被打印为空。在第二种情况下(String str;),当你试图打印该变量时,将产生一个未初始化变量的错误。 也就是说,MQL5在这方面的容忍度更高。 哪个更好,我甚至不知道。 如何不向变量分配内存? 内存被分配,变量包含任意的垃圾。 而事实上,字符串并没有输出任何数值,因此,缓冲区是空的,这是符合逻辑的。 char ch; short sh; int in; double db; string st; Print(sizeof(ch)); Print(sizeof(sh)); Print(sizeof(in)); Print(sizeof(db)); Print(sizeof(st)); Print("---------------------"); Print(ch); Print(sh); Print(in); Print(db); Print(st); Nikolai Semko 2020.01.27 00:20 #1610 Roman: 如何不向变量分配内存? 内存被分配,但变量不包含任意的垃圾。 而事实上,字符串并没有输出任何数值,因此,缓冲区是空的,这是符合逻辑的。 char ch; short sh; string st; Print(sizeof(ch)); Print(sizeof(sh)); Print(sizeof(st)); string str1; string str2="Однажды, в студёную зимнюю пору я из лесу вышел; был сильный мороз."; Print(sizeof(str1)); // 12 Print(sizeof(str2)); // 12 uchar ch1[],ch2[]; Print(StringToCharArray(str1, ch1)); // 0 Print(StringToCharArray(str2, ch2)); // 68 1...154155156157158159160161162163164165166167168...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
2020.01.27 01:15:57.859 tst (EURUSD,H1) (null) , 0.000000 , 0
如果我取消类型转换,"NULL"--"void "类型的表达是非法的。
有趣的是,事实证明,nput字符串可以被初始化为void
NULL是初始化。这个例子特意显示了一个非输入字符串。
NULL / NIL(换句话说)不能成为一个常量字符串实体的初始化。
至少因为mql字符串不像C语言那样是一个 "指针"。它没有 "一无所有 "的特殊状态。
PS(哦,我没料到自己会这样)。
她没有 "一无所有 "的特殊状态
关于交易、自动交易系统和交易策略测试的论坛
mql5的特殊性,技巧和窍门
fxsaber, 2020.01.26 15:54
我每天都在使用这个条件。
至少因为mql字符串不像C语言那样是一个 "指针"。它没有 "一无所有 "的特殊状态。
PS(哦,我没料到自己会这样)。
可惜没有,MQL中的字符串是一个有分配内存的实体。@Ilyas 解释了为什么StringBufferLen()可能不显示字符串的长度,而是显示用来存储字符串的内存。
我每天都在使用这个条件。
这根本不是什么指标,在MQL4中,我使用StringConcatenate()取消对任何对象的指针,也就是说,内置函数的工作不是由MQL规则实现的))。
这根本不是什么指标,我在MQL4中使用StringConcatenate()取消了对任何对象的指针,也就是说,内置函数不是由MQL规则实现的))
里面的东西没有任何区别。
关于交易、自动交易系统和策略测试的论坛
mql5的特殊性,技巧和窍门
Igor Makanu, 2020.01.26 22:27
里面的情况如何并无区别。
用你的例子补充了我的帖子
我还做了几个实验,输入字符串s = NULL。
据我所知,当我们没有试图使用输入变量的值时,它将是NULL,但当我们试图给另一个变量赋值或简单地取消它时,NULL将消失,即内存 将被分配 给这个输入变量。
据我所知,当我们不试图使用一个输入变量的值时--这个值是NULL,但是在那个时候,如果我们试图把这个输入变量的值分配给另一个变量,或者干脆取消这个输入变量,那么这个NULL就会消失,即内存会被分配 给这个输入变量。
上面已经详细介绍了输入变量的运行机制。
里面的东西没有任何区别。
实体解读的特殊性(在mql中没有指针,它不是C语言,让它有实体)。
input是一个在启动时声明的常量,你不能在物理上给它 "NULL "的值。
const string nothing=NULL; /// <--- ЭТО ЧТО ?
是的,这种行为可能只是 "万无一失"。
显然,由于输入变量 必须被初始化,=NULL 被人为地等同于="", 而该变量已经在内存中占据了至少一个字节。
在MQL5中的条目。
是绝对相同的。没有为该变量分配内存。总之,我没有发现任何差异。
例如,在java中,这种记录略有不同,尽管在这两种情况下也没有为变量分配内存。第一个变量(String str = null;)将被视为初始化,尽管没有为变量分配内存,而且变量可以被打印为空。在第二种情况下(String str;),当你试图打印该变量时,将产生一个未初始化变量的错误。
也就是说,MQL5在这方面的容忍度更高。
哪个更好,我甚至不知道。
如何不向变量分配内存?
内存被分配,变量包含任意的垃圾。
而事实上,字符串并没有输出任何数值,因此,缓冲区是空的,这是符合逻辑的。
如何不向变量分配内存?
内存被分配,但变量不包含任意的垃圾。
而事实上,字符串并没有输出任何数值,因此,缓冲区是空的,这是符合逻辑的。