PROFIからSUPER PROFIへの質問-1. - ページ 3

 
聖なる単純性 (c) Jan Hus
 
Sorento:
聖なる単純性 (c) Jan Hus

どういうことですか?
 
drknn:

どういうことですか?

そんな単純な話じゃないんです。

今度は関数内部で、渡された変数を操作します。

数学が教えてくれるように--擬似変数をアドレスで渡してしまったら--そこにある不思議はすべて消えてしまう。

しかし、もしアドレスプールに定数が並んでいたら......すべてが変わってしまう。

0が1になり、その逆もしかり。

;)

 
なぜ、EA/インジケータ/スクリプトで、アドレスで変数を渡すような、そんな複雑なことが必要なのでしょうか?擬似変数、アドレスプール、定数アライメントという言葉はどういう意味ですか?
 
drknn:
なぜ、EA/インジケータ/スクリプトで、アドレスで変数を渡すような複雑な操作が必要なのでしょうか?擬似変数、アドレスプール、定数アライメントという言葉はどういう意味ですか?

コンパイラとインタプリタは似ている。

だから、考えてみてください。

関数に渡されるパラメータ(変数)はどのようにしているのか、また、関数に式が渡された場合...

;)

 
Sorento:

私も疑問は共有しています。

スーパープロを気取らない、プロの域に達しない--誰もメッセージを読まない...馬の目にも明らかです。

しかし、コードを書けば書くほど(今のところあまりないのですが)-疑問が湧いてきます。

関数内でパラメータはどのように渡されるのですか?

(名目的にも価値的にも)

文字列変数を渡すとジリ貧になるのでは...という疑惑があります。

;)


自分ではプロともスーパープロとも思っていないけれども、答えてみる :) 。

MTはC2C++で実装されており、開発者は不明な点があれば、この言語の標準を参照することを推奨しています。

C2C++の規格では、配列を除くすべてのパラメータは、式も含めて値で渡されます。つまり、パラメータのコピーが渡される。呼び出された関数 内で値によって渡されたパラメータを変更しても、外部呼び出し関数内のパラメータは変更されない。変更が必要な場合は、参照渡し(アドレス渡し)、つまりパラメータとして渡された変数が位置するアドレスを渡す必要があります。その後、このアドレスに位置する値を変更することができ、アドレスは変更できません。配列はすべて参照渡しで、つまりアドレスはすぐに渡される。そうしないと、膨大な量のデータをスタックにコピーしなければならないからだ。

参照渡しされたパラメータが呼び出される関数内で変更されないようにするために、C/C++ではconst 修飾子が使用されています。

C2C++では、文字列は文字配列ですが、1つだけ違うのは、その配列は文字列終端記号' \0' で終わらなければならないことです。

MCLでは、例題を信じるなら、文字列は文字列のサイズとポインタを含む構造体(つまり、文字列配列そのもの)です。

この例は、C2C++用です。

//----
struct MqlStr
  {
   int               len;
   char             *string;
  };

ここで、char *は文字型(char型)の変数へのポインタである。ポインタの型(char*, int*, double*......)は常に整数で、これはセルのアドレスです。つまり、この変数には文字列ではなく、セルのアドレスが格納される。文字そのものの値は,次のように取り出すことができる。*文字列または文字列[0]。動作させるためには,配列が静的に配置されている場合,つまり記述でサイズが指定されていない場合を除き,常に配列用のメモリを確保する必要があります(例.

char string[1025] ;

は1025個の要素を持つ文字の配列である...。最後の文字(string[1024]='second')を指定すると、配列を1024文字の文字列として扱えるようになります。

文字列の要素は,通常の配列string[i]の要素として受け取ることができる。 動的に配置する場合は,文字列に+1個の要素を割り当て,文字列の末尾の文字を.............とする。

従って、文字列は常に参照渡しである。文字列を関数に渡し、そこで値を変更し、呼び出された関数が終了した後にその値(この値)を読み取るという例で確認することができます。

頑張ってください。

 
VladislavVG:

従って、文字列は常に参照渡しである。文字列を関数に渡し、そこで値を変更し、呼び出された関数が終了した後にその値(この値)を読み取るという例で確認することができます。

改造を禁止するものではありません。確認しました。
 
drknn:

ああ、ばかばかしい。開発者への質問なのか、DLLですべてがうまくいっているわけではないのでしょう。私はC++プログラマーではありません。一度、いくつかのプログラムを作ってみましたが、C++シェルをインストールしている間は、すべてがうまくいくということに遭遇しました。しかし、あなたが別のコンピュータに実行可能ファイルを転送するとすぐに、いくつかのDLL-サイクルの欠如を発見したとき。また、私は文字列を扱うのが好きではありません。その言語をあきらめ、Delphiに落ち着きました。そのようなDLLは、ターミナルではごく普通のことです。

追伸

だから、プログラミングのためのシェルを選ぶというレベルでも、この言語では問題が起きるのに、なぜみんなC++をそんなに褒めるのか理解できない...。

問題は、これらのライブラリとスクリプトはすべて、チャート上で手動でロードすれば問題なく動作することです。また、現在のプロセスからプログラム的にチャートにロードしても機能します。

リモートプロセスから読み込むと問題が発生します。

=====================================

コードを別のコンピューターに転送することについて。デバッガーのバージョンを移行した可能性が高いです。Studioからデバッグ用のライブラリを引っ張ってくる。リリースをコンパイルしているはずです。そうすれば、どこでもすべてがうまくいくはずだった。

 
例えて言うなら、私が間違っていたのです。
 
TheXpert:
例えて言うなら、私が間違っていたのです。

そうですね。このスレッドのタイトルの用語に瞬きしたほどです。名前が違うことに気づかなかったのです。私の注意はすでに特定のパターンに同調していたのです。
理由: