Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
MqlRates mrate[];//массив нулевого размера
Verwenden Sie ArrayResize und ArrayInitialize.
Normalerweise wird diese Struktur bei CopyRates verwendet.
Renat sagte, es sei besser, es so zu machen:
Versuchen wir, es herauszufinden. Soweit ich mich erinnere, sprach Renat über die Initialisierung einer einfachen Variablen, nicht eines Arrays. Im Referenzhandbuch sind mit Kämpfen ähnliche Beispiele erschienen:
Sie hingegen versuchen, bei der Deklaration ein Array und nicht eine einfache Variable zu initialisieren. Dieses Beispiel habe ich im Handbuch gefunden:
Das Array wird hier mit einer endlichen Anzahl von Werten initialisiert, und die Erklärung besagt, dass der Compiler die Größe eines solchen Arrays auf der Grundlage der Anzahl dieser Werte bestimmt. Ich bin zu faul, das zu überprüfen - die Größe des Arrays f[] aus dem Beispiel ist höchstwahrscheinlich 6.
In Ihrem Beispiel ist die Größe der {0} Initialisierungssequenz 1. Folglich wird der Compiler höchstwahrscheinlich die Größe des Arrays mrate[] als 1 definieren. In diesem Fall ist es interessehalber so zu formulieren:
Wird dies einen Fehler verursachen?Ich war verwirrt. Swan hat es deutlich erklärt. Ich habe die falsche Struktur gewählt. Es muss überhaupt nicht initialisiert werden, da es Werte annimmt. Diejenigen, die ihre Werte angeben, müssen Sie initialisieren. Ich habe mich geirrt.
Nun, das ist die Hauptsache. Die Frage nach Renate war an sich schon interessant, also habe ich mir auch etwas dabei gedacht.
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; keine dynamische Anordnung.
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; nicht-dynamisches Array.
double f[] ist selbst ein dynamisches Array. Dieses Array wird bei der Erstellung deklariert. Ich habe nicht analysiert, ob sie nach der Initialisierung mit der endlichen Initialisierungssequenz nicht mehr dynamisch sein wird. Das Wichtigste, was Sie oben herausgefunden haben, ist, dass das deklarierte Array nach der Initialisierung eine bestimmte Größe annimmt.
Wollen Sie damit sagen, dass ein dynamisches Array im Ergebnis einer expliziten Initialisierung nicht mehr dynamisch ist, d.h. seinen dynamischen Status und seine Eigenschaften verliert? - Vielleicht, aber ich bezweifle es. Frage: Aus welchen Gründen (warum) hört ein dynamisches Array double f[] auf, ein dynamisches Array zu sein?
double f[] ist selbst ein dynamisches Array. Sie wird bei der Schöpfung erklärt. Ich habe nicht untersucht, ob sie nach der Initialisierung durch die endgültige Initialisierungssequenz nicht mehr dynamisch ist. Das Wichtigste, was Sie oben herausgefunden haben, ist, dass das deklarierte Array nach der Initialisierung eine bestimmte Größe annimmt.
Wollen Sie damit sagen, dass ein dynamisches Array als Ergebnis einer expliziten Initialisierung aufhört, dynamisch zu sein, d.h. es verliert seinen dynamischen Status und seine Eigenschaften? - Vielleicht. Die Frage ist dann: Warum?
Der springende Punkt ist, dass wir in MKL ein wenig von der realen Welt "isoliert" sind )), der Compiler entscheidet in einer solchen Situation für uns. Wenn er es sieht:
erstellt ein statisches Array (ohne die Möglichkeit, die Größe zu ändern). Wenn er es sieht:
double f[];
erzeugt die Struktur struct MqlArrayObject (sie verhält sich wie ein dynamisches Array) im globalen Speicher. Daher können Sie ein Array nicht nach der Deklaration initialisieren (double f[]; f = {6};)
P.S.: alles Geschriebene ist mein IMHO, ich könnte irgendwo falsch liegen.
Frage eines Dummkopfs: Stimmt es, dass, wenn der Compiler die Zeichenfolge
zunächst ein statisches Array anstelle eines dynamischen Arrays erstellt wird?
Es gibt eine Regel:"Bei der Deklaration eines dynamischen Arrays (ein Array mit einem nicht spezifizierten Wert im ersten Paar eckiger Klammern) erstellt der Compiler automatisch eine struct-Variable MqlArrayObject(ein dynamisches Array-Objekt) und stellt Code für die richtige Initialisierung bereit. Oder ist das Vorhandensein der endgültigen Initialisierungssequenz gleichbedeutend mit "expliziter Angabe aller signifikanten Array-Dimensionen" und führt zur Erstellung eines statischen Arrays?
Frage eines Dummkopfs: Stimmt es, dass, wenn der Compiler die Zeichenfolge
zunächst ein statisches Array anstelle eines dynamischen Arrays erstellt wird?
Es gibt eine Regel:"Bei der Deklaration eines dynamischen Arrays (ein Array mit einem nicht spezifizierten Wert im ersten Paar eckiger Klammern) erstellt der Compiler automatisch eine struct-Variable MqlArrayObject(ein dynamisches Array-Objekt) und stellt Code für die richtige Initialisierung bereit. Oder ist das Vorhandensein der endgültigen Initialisierungssequenz gleichbedeutend mit "expliziter Angabe aller signifikanten Array-Dimensionen" und führt zur Erstellung eines statischen Arrays?
Ist es schwach, das zu überprüfen?
;)
Können Sie das nicht überprüfen?
;)
Im Moment ist sie noch schwach. Ich werde nicht vor heute Abend zum Terminal kommen. Sonst hätte meine Antwort auf 220Volt anders geklungen, wie Sie verstehen :) Ich konnte die Informationen nicht im Handbuch finden. Vielleicht habe ich nicht genau genug hingesehen, aber ich war akribisch.
OK, ich bin nicht mehr im Terminal. :) Ich bin auch außerhalb des Terminals.
Elementar geprüft - versucht, ArrayResize(...) zu verwenden