"ダミー "からの質問 - ページ 123

 
papaklass:

MqlRates mrate[];//массив нулевого размера

ArrayResize とArrayInitialize を使用する。

通常、CopyRates ではこの構造 体が使用される。

 
papaklass:

レナートは、こうするのがいいと言っていた。

MqlRates mrate[] = {0};    //структура для хранения информации о ценах, объемах и спреде.

考えてみよう。私の記憶では、Renatは配列ではなく、単純な変数の初期化について話していたように思います。リファレンスマニュアルにも似たような例が載っている。

//--- инициализация всех полей структуры нулевым значением
MqlTradeRequest request={0};

一方、あなたは、宣言時に単純な変数ではなく、配列を初期化しようとします。ハンドブックにこんな例が載っていました。

double f[]     = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 };

Если размер инициализируемого массива не указан, то он 
определяется компилятором, исходя из размера инициализирующей последовательности.

この配列は有限個の値で初期化されており、コンパイラはこの値の数によって配列の大きさを決定していると説明されています。私はそれを確認するためにあまりにも怠惰です - 例から配列f[]のサイズは6である可能性が最も高いです。

サンプルでは、{0}の初期化シーケンスの サイズは1です。そのため、コンパイラは配列mrate[]のサイズを1として定義することが多いようです。ここでは、興味本位で、このように指定する。

MqlRates mrate[] = {0,0,0,0,0,0,0,0,0,0,0,0};    //структура для хранения информации о ценах, объемах и спреде.
エラーになるのでしょうか?
 
papaklass:
私は混乱しました。白鳥はわかりやすく説明してくれた。構造を間違えてしまったんです。値を取るので、初期化する必要は全くありません。値を与えるものは初期化する必要があります。私は間違っていた。

まあ、それがメインなんですが、レナーテに関する質問自体が面白かったので、私も何かわかったような気がしました。

 

double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 };動的な配列では ありません。

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
220Volt:

double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; 非動的な配列です。

double f[] はそれ自体で動的な配列です.作成時に宣言されるのはこの配列である。有限の初期化シーケンスで 初期化した後、動的でなくなるかどうかは解析していない。以上、主に宣言された配列が初期化後に特定のサイズを獲得することがわかりましたね。

明示的に初期化した結果の動的配列は、動的でなくなる、つまり動的な状態や特性を失うということですか?- そうかもしれませんが、どうでしょう。 質問:動的配列 double f[] が動的配列でなくなる根拠(理由)は何ですか?

 
Yedelkin:

double f[]はそれ自体が動的配列である.それは、創造時に宣言されます。最終的な初期化シーケンスによる 初期化後に動的でなくなるかどうかは調べていない。以上、主に宣言された配列が初期化後に特定のサイズを獲得することがわかりましたね。

明示的に初期化した結果の動的配列は、動的でなくなる、つまり動的な状態や特性を失うということですか?- そうかもしれませんが、ではなぜなのか?

要は、私たちMKLは実世界から少し「隔離」されているのです)、このような状況ではコンパイラが私たちのために判断してくれるのです。それが見えたら

double f[5];
double f[] = {0, 1, 3};

は静的な配列を作成します (サイズ変更機能はありません)。それが見えたら

double f[];

構造体MqlArrayObject(動的配列として動作する)をグローバルメモリに作成する。したがって、宣言後に配列を初期化することはできません(double f[]; f = {6}; )。

追伸:書いてあることはすべて私のIMHOであり、どこかで間違っている可能性があります。

 

ダミーからの質問:コンパイラが文字列を見た場合、それは本当ですか?

double f[] = {0, 1, 3};

とすると、最初は動的な配列ではなく静的な配列が作成されるのでしょうか?

動的配列 最初の角括弧のペアに値が指定 されていない配列)を宣言する場合、コンパイラは自動的に構造体 変数MqlArrayObject(動的配列オブジェクト)を作成し、適切な初期化のためのコードを提供します」というルールがあります。それとも、最終的な初期化シーケンスの 存在は、「重要な配列の次元をすべて明示的に指定する」ことと同じで、静的な配列の作成につながるのでしょうか?

 
Yedelkin:

ダミーからの質問: コンパイラが文字列を見た場合、それは本当ですか

とすると、最初は動的な配列ではなく静的な配列が作成されるのでしょうか?

動的配列 最初の角括弧のペアに値が指定 されていない配列)を宣言する場合、コンパイラは自動的に構造体 変数MqlArrayObject(動的配列オブジェクト)を作成し、適切な初期化のためのコードを提供します」というルールがあります。それとも、最終的な初期化シーケンスの 存在は、「重要な配列の次元をすべて明示的に指定する」ことと同じで、静的な配列の作成につながるのでしょうか?

チェックが弱いのでしょうか?

;)

 
MetaDriver:

確認できないのか?

;)

今のところあまりないですね。ターミナルに着くのは今日の夕方だ。そうでなければ、220Vに対する私の答えが違って聞こえたはずです、おわかりですね :)ハンドブックに情報が載っていなかった。よく見ていなかったかもしれませんが、細心の注意を払って。
 
Yedelkin:
今のところ、弱いですね。ターミナルに着くのは今日の夕方だ。そうでなければ、220Voltに対する私の答えが違って聞こえたはずです、おわかりですね :)ハンドブックに情報が載っていなかった。よく見ていなかったのかもしれませんが、几帳面な性格なんです。

よし、ターミナルから出たぞ。:) 私も端末の外にいます。

初歩的なことを確認 -ArrayResize(...)を使おうとしています。

Документация по MQL5: Операции с массивами / ArrayResize
Документация по MQL5: Операции с массивами / ArrayResize
  • www.mql5.com
Операции с массивами / ArrayResize - Документация по MQL5