错误、漏洞、问题 - 页 2889 1...288228832884288528862887288828892890289128922893289428952896...3184 新评论 Roman 2020.10.27 14:36 #28881 A100:你有一个随机数字0,我有540016640但它们仍然是随机数字。 我以为MQ已经被清零了。 Valeriy Yastremskiy 2020.10.27 14:42 #28882 Roman:我以为MQ已经被清零了。 在全局变量 中,它们似乎被初始化为零,但在函数的主体中,我在第一遍就遇到了不同的初始化。我试图在使用前总是进行初始化。虽然我同意,但行为必须是毫不含糊的。 循环体中的另一个声明,在括号中,使变量成为循环的局部变量。只是文档中没有。 A100 2020.10.27 14:43 #28883 Roman:而且,编译器也不会警告 说该变量没有被初始化。 Print(...)可能不会警告你,因为参数是 通过非常量引用传递的。 int f( int& i ) { return i; } void OnStart() { int i; f( i ); //нормально } Alexey Viktorov 2020.10.27 14:48 #28884 A100:如果循环是相同的,那么编译器的行为应该是相同的,而它是不同的。这就是错误所在。你解释了为什么在案例(1)中有警告,然后解释为什么在案例(2)中没有?原则上有什么变化?然后,如果使用了一个未初始化的变量,为什么执行代码时最后的结果是正确的?有这样一种科学--逻辑。如果A和B是一样的,而且A是红色的,B也一定是红色的,而不是绿色 的 我没有研究过编程,我只能从逻辑上推测,就像瓦西里-伊万诺维奇和佩特卡对逻辑的推测。 在第一种情况下,整个字符串被执行 for ( int i = 0, j; i < 10; i = j ) 这里j变量没有被初始化,但它的值被分配给i变量。 在第二种情况下,尽管j变量没有被初始化,但在使用它的下一行中,并没有分配它的值,而是分配了它的值。换句话说,j变量被初始化为i变量的值 这里也有一个没有警告的变体 for(int i = 0, j; i < 10; j = i) { j = i+1; } A100 2020.10.27 15:01 #28885 Alexey Viktorov:我没有学习 成为一个程序员,我只能从逻辑上推测,就像瓦西里-伊万诺维奇和佩特卡推测逻辑一样。在第一种情况下,整个字符串被执行这里j变量没有被初始化,但它的值被分配给i变量。 又是谁在研究它?我认为这里的大多数人(像我一样)都是自学成才。 你需要研究for 循环操作符,以了解操作的顺序。在(1)中, j变量被赋予i+1的值 j = i+1 之前,它出现在赋值运算符的右边。 i = j Roman 2020.10.27 15:02 #28886 Valeriy Yastremskiy:全局变量 似乎被初始化为0,但函数的主体在第一遍时遇到了不同的初始化。 我总是尝试在使用前进行初始化。虽然我同意,行为应该是毫不含糊的。循环主体中的另一个声明,在括号中,使变量成为循环的局部变量。医生们就是没有这个能力。 是的,我也总是初始化变量,这就像二乘二,我应该永远记住。 这是我从C语言中得到的)) 所以这个带有未初始化变量的循环例子是不好的做法。 A100 2020.10.27 15:11 #28887 Roman:是的,我也总是初始化变量,这就像二乘二,必须永远记住。 这是我从C语言中得到的)) 所以这个带有未初始化变量的循环例子是不好的做法。 你需要初始化它,但只能用一个有意义的值。在上面的例子中没有这样的值,所以这不是一个坏的做法,是唯一可能的方法。否则会出现双重初始化 int f( int i ) { /*вычисления*/ } void g( int k ) { for ( int i = 0, j; i < k; i = j ) { j = f( i ); /*вычисления*/ } } Roman 2020.10.27 15:34 #28888 A100:初始化,但只能用一个有意义的值。在上面的例子中没有这样的值,所以这种做法并不坏,它是唯一可能的做法。否则就会出现双重初始化 如果你初始化了以下内容,会有什么变化? int f( int i ) { /*вычисления*/ } void g( int k ) { for ( int i=0, j=0; i < k; i = j ) { j = f( i ); /*вычисления*/ } } A100 2020.10.27 15:47 #28889 Roman:如果初始化为j=333,会有什么变化? 为什么是零而不是j=333呢?也就是说,这是一个无意义的初始化,可以隐藏一个难以发现的错误 Roman 2020.10.27 15:49 #28890 A100:为什么是零而不是333呢?也就是说,这是一个无意义的初始化,可以隐藏一个难以捕捉的错误。 如果你需要捕捉这个值的错误,好吧,用333初始化它 )) 这只是一个起始值。 1...288228832884288528862887288828892890289128922893289428952896...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你有一个随机数字0,我有540016640
但它们仍然是随机数字。
我以为MQ已经被清零了。
我以为MQ已经被清零了。
在全局变量 中,它们似乎被初始化为零,但在函数的主体中,我在第一遍就遇到了不同的初始化。我试图在使用前总是进行初始化。虽然我同意,但行为必须是毫不含糊的。
循环体中的另一个声明,在括号中,使变量成为循环的局部变量。只是文档中没有。
而且,编译器也不会警告 说该变量没有被初始化。
Print(...)可能不会警告你,因为参数是 通过非常量引用传递的。
如果循环是相同的,那么编译器的行为应该是相同的,而它是不同的。这就是错误所在。你解释了为什么在案例(1)中有警告,然后解释为什么在案例(2)中没有?原则上有什么变化?然后,如果使用了一个未初始化的变量,为什么执行代码时最后的结果是正确的?
有这样一种科学--逻辑。如果A和B是一样的,而且A是红色的,B也一定是红色的,而不是绿色 的
我没有研究过编程,我只能从逻辑上推测,就像瓦西里-伊万诺维奇和佩特卡对逻辑的推测。
在第一种情况下,整个字符串被执行
这里j变量没有被初始化,但它的值被分配给i变量。
在第二种情况下,尽管j变量没有被初始化,但在使用它的下一行中,并没有分配它的值,而是分配了它的值。换句话说,j变量被初始化为i变量的值
这里也有一个没有警告的变体
我没有学习 成为一个程序员,我只能从逻辑上推测,就像瓦西里-伊万诺维奇和佩特卡推测逻辑一样。
在第一种情况下,整个字符串被执行
这里j变量没有被初始化,但它的值被分配给i变量。
又是谁在研究它?我认为这里的大多数人(像我一样)都是自学成才。
你需要研究for 循环操作符,以了解操作的顺序。在(1)中, j变量被赋予i+1的值
j = i+1
之前,它出现在赋值运算符的右边。
全局变量 似乎被初始化为0,但函数的主体在第一遍时遇到了不同的初始化。
我总是尝试在使用前进行初始化。虽然我同意,行为应该是毫不含糊的。
循环主体中的另一个声明,在括号中,使变量成为循环的局部变量。医生们就是没有这个能力。
是的,我也总是初始化变量,这就像二乘二,我应该永远记住。
这是我从C语言中得到的))
所以这个带有未初始化变量的循环例子是不好的做法。
是的,我也总是初始化变量,这就像二乘二,必须永远记住。
这是我从C语言中得到的))
所以这个带有未初始化变量的循环例子是不好的做法。
你需要初始化它,但只能用一个有意义的值。在上面的例子中没有这样的值,所以这不是一个坏的做法,是唯一可能的方法。否则会出现双重初始化
初始化,但只能用一个有意义的值。在上面的例子中没有这样的值,所以这种做法并不坏,它是唯一可能的做法。否则就会出现双重初始化
如果你初始化了以下内容,会有什么变化?
如果初始化为j=333,会有什么变化?
为什么是零而不是j=333呢?也就是说,这是一个无意义的初始化,可以隐藏一个难以发现的错误
为什么是零而不是333呢?也就是说,这是一个无意义的初始化,可以隐藏一个难以捕捉的错误。
如果你需要捕捉这个值的错误,好吧,用333初始化它 ))
这只是一个起始值。