静的配列 ? - ページ 4

 
2番目のループでi=Barsの場合、配列の すべての要素が表示されますが、値は表示されず、all = 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

配列に関する本を読んだとき、次のように書いてあるのを見ましたか?

"配列を宣言するときは、データ型、配列名、各次元の要素 数を指定する必要があります:"

はい、そうです。

私の理解では、double v1[]はグローバルにデータ型を決定し、start()の前に決定しました。
そして、[i]は配列の要素の数を教えて初期化します。この場合、要素= Barsの1次元配列ですが、i--のデインクリメントで数が変わります。
ということですね?

では、要素数をデインクリメントしているのであれば、要素数がなくなった場合、バッファはどのようにインジケータを格納し、ポストするのでしょうか?
あるいは、[i]をデインクリメントすることによって、要素はどうなるのでしょうか?
それらはただ消えるのでしょうか?それらは参照されるためにまだv1[i]に格納されていますか、それらは消えていますか?

もしこれがわかれば、それらを参照する方法がわかるかもしれませんし、もし消えてしまったとしても、それを保持する方法がわかるかもしれません。
この時、v1[i]=v1[i+1]であれば、v1[i]を参照することができるようですが、この時点でprintすると、v1[i]=0になってしまいます。

これは、配列が空の場合、配列に要素がないので、空の配列を0と表示することになるので、ある意味=0に意味があるような気がします。

私は本当に理解しているかどうかわからないが、私はそれについて考え、ドキュメントを何度も何度も読み返した。

もしBarsが1つ以上の数字を持っているならば、次元は私が考えているのとは違うかもしれません。
だから、もっと詳しく読んで、実際のところどうなのかを理解しようと思っています。

私は、Bar=チャート上のバーの 数というように、単に1つの数値のカウントだと考えていました。
Barsをプリントすると、5minのチャートで1002となり、これは1次元のものだと考えています。


これからも頑張ります。

 

もし配列を大きく(または小さく)したい場合は、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 Script none EURUSD,M5: removed
2011.09.21 07:54:26 Script none EURUSD,M5: loaded successfully

私は出力として45.6を見ていると思っていたが? 私は間違っていますか?

自分で固定配列[5] = {1,2,3,4,5} を作りました。

そして、Print[5]またはPrint[3]などとすることができるようです。

中括弧を入れて、もう一度スクリプトを見てみます。





 

OK, good ... now edit this line ... ...

..そしてもう一度試してみてください。

double test[];

to

double test[40];
 
2011.09.21 08:07:58 none EURUSD,M5: 非初期化の理由 0
2011.09.21 08:07:58 none EURUSD,M5: 非初期化
2011.09.21 08:07:58 none EURUSD,M5: test[39]= 45.6


くっそー、数時間で戻ってこないといけない。

運転しながらもう少し考えてもいいかもしれませんね

 

本当に考えることは何もないんです.

"配列を宣言する際には、データ型、配列名、各次元の要素 数を指定する必要があります:"

配列の項目数を宣言する必要があります ... ...

 

面白い
要素数の宣言はv1[i]で行うのでは? i=Barsなので、v1[Bars]と言っているのと同じで、その数字が何であろうと同じだと思っていました。


宣言されていないのであれば、私も参照できないのに、どうしてインジケータがv1[i]が何であるかを知っているのか理解できないのですが?
同じスクリプトがインジケータ版で動作し、v1[]のバッファに格納されているので、線を引くためにバッファを参照する方法をどのように知っているのでしょうか?

現在、インジケータで動作しています。これは違うテーマなのでしょうか?

 

そう、Indicatorバッファは 普通の配列とは扱いが違うのです。

v[i] は配列の宣言ではなく,要素の1つに過ぎません.しかしdouble v[]; は要素数が0の配列です.