静态数组 ? - 页 4

 
对于第二个循环中的i=Bars,它打印了所有的数组元素,但没有打印值,而且所有的=0

我很困惑

在第一个循环中去掉了结尾的i--,但没有影响。

 

只要做一个小小的改动,你的代码似乎就可以做一些事情了 . .

2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[0]=0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[1]=0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[2]=0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[3]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[4]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[5]=0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[6]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[7]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[8]=0

当你阅读关于数组的书时,你是否看到它是这样说的?

"在声明一个数组时,必须指定数据类型、数组名称和每个维度的元素数:"

 
RaptorUK:

只要做一个小小的改动,你的代码似乎就可以做一些事情了 . .

2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[0]=0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[1]=0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[2]=0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[3]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[4]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[5]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[6]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[7]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[8]=0

当你阅读关于数组的书时,你是否看到它是这样说的?

"在声明一个数组时,必须指定数据类型、数组名称和每个维度的元素数:"

是的,我做到了

我的理解是,在start()之前,double v1[]决定了全局的数据类型。
然后[i]初始化数组,告诉它数组中有多少个元素,在这种情况下,1维的元素=Bars,但是在i--的递增过程中,这个数字会改变。
对吗?

因此,如果它正在减少元素的数量,那么如果元素的数量不再存在,缓冲区如何存储和发布指标?
或者我想我应该说,当他们递减[i]时,这些元素会发生什么?
它们就这样消失了吗?它们是仍然存储在v1[i]中被引用,还是已经消失?

如果我能够弄清楚这一点,也许我就能够理解如何引用它们,或者如果它们消失了,那么我就能够弄清楚如何保留它们以供使用。
我不明白的是,else语句似乎可以引用v1[i]=v1[i+1],那么当我在这一点上打印时,如果v1[i]=0,它怎么能引用v1[i]。

这在某种意义上来说,=0是有意义的,因为如果数组是空的,那么它就会把空数组打印成0,因为数组中没有任何元素。

我不确定我是否真的理解它,但我一直在思考这个问题,并反复阅读文件。

现在考虑到Bars,如果Bars有多个数字与之相关,那么维度可能与我所想的不同。
所以我想我也要多读一些这方面的资料,以确保我明白我到底是什么。

我以为它只是一个单一的数字计数,如Bar=图表中的条数
当我打印Bars时,在5分钟的图表上给了我1002,我想这是一个单一的维度。


我会继续努力的。

 

如果你想让一个数组变大(或变小),你需要使用ArrayResize......一个数组就像其他的变量一样,只是可以有很多的数组,你可以很容易地访问。

复制这段代码并作为一个脚本运行,你认为输出结果会是什么?

//+------------------------------------------------------------------+
//|                                                  TestArray.mq4   |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      ""


// #property indicator_chart_window



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   {
   double test[];
   
   test[39] = 45.6;
   Print("test[39]= ",test[39] );
   

      return(0);
   }
//+------------------------------------------------------------------+

     
 
2011.09.21 07:54:26 none EURUSD,M5:removed
2011.09.21 07:54:26 none EURUSD,M5: uninit reason 0
2011.09.21 07:54:26 none EURUSD,M5: deinitialized
2011.09.21 07:54:26 none EURUSD,M5: test[39] = 0
2011.09.21 07:54:26 none EURUSD,M5: initialized


这是脚本产生的结果,我准确地复制了它

我只是双击它,它就运行了,这是出现在专家标签中的内容

脚本的日志只是说
2011.09.21 07:54:26 脚本无 EURUSD,M5: 删除
2011.09.21 07:54:26 脚本无 EURUSD,M5: 载入成功

我想我应该看到45.6作为输出 ? 我错了吗 ?

我创建了自己的固定数组[5] = {1,2,3,4,5}。

而且似乎可以打印[5]或打印[3]等。

让我把大括号放进去,再看看这个脚本吧





 

好的,很好。现在编辑这一行。

..再试一次。

double test[];

to

double test[40];
 
2011.09.21 08:07:58 none EURUSD,M5: uninit reason 0
2011.09.21 08:07:58 none EURUSD,M5:deinitialized
2011.09.21 08:07:58 none EURUSD,M5: test[39]=45.6


该死的,我得走了,几个小时后回来。

也许我可以在开车时再考虑一下这个问题

 

真的没有什么可考虑的......。

"当声明一个数组时,必须指定数据类型、数组名称和每个维度的元素数:"

你需要声明数组中的项目数量 .

 

有趣的是
我以为元素数量的声明是用v1[i]完成的? 因为i=Bars,我以为这和说v1[Bars]是一样的,不管这个数字是多少。


如果它没有被声明,我不明白如果我也不能引用它,指标怎么会知道v1[i]是什么?
同样的脚本在指标版本上工作,并将其存储在v1[]的缓冲区中,那么它是如何知道如何引用缓冲区来画线的?

它目前在指标上工作。这是一个不同的主题吗?

 

是的,指标缓冲区 的处理方式与普通数组不同。

v[i]不是在声明数组,它只是其中的一个元素 ......但是double v[]; 是一个零元素的数组 ......所以 v[anything] 总是 = 0