Array-Initialisierung

 

Ich habe über Arrays aus dem mql4 Leitfaden gelernt, und ich habe über ein Thema, das ich Probleme mit kommen; Array-Initialisierung ist etwas verwirrend ich verstehe nicht die Anweisung unten

"

Array-Initialisierung


Ein Array kann nur durch Konstanten eines entsprechenden Typs initialisiert werden. Eindimensionale und mehrdimensionale Arrays werden durch eine eindimensionale Folge von Konstanten initialisiert, die durch Kommas getrennt sind. Die Folge wird in geschweifte Klammern eingeschlossen:

int Mas_i[3][4] = { 0, 1, 2, 3,   10, 11, 12, 13,   20, 21, 22, 23 };
 
double Mas_d[2][3] = { 0.1, 0.2, -0.3,    -10.2, 1.5, 7.0 };
 
bool Mas_b[5] = { false, true, false, true, true }

"

Die Tatsache, dass ein Array nur durch Konstanten eines entsprechenden Typs initialisiert werden kann, verwirrt mich nicht, wohl aber das Konzept der Array-Initialisierung und die Tatsache, dass eine eindimensionale Folge ein mehrdimensionales Array initiieren kann.

Ich bin verwirrt durch das Folgende.

"

In der initialisierten Sequenz können eine oder mehrere Konstanten weggelassen werden. In einem solchen Fall werden entsprechende Array-Elemente vom numerischen Typ mit Null initialisiert, Elemente von Arrays vom String-Typ werden mit dem String-Wert "" (Anführungszeichen ohne Leerzeichen) initialisiert, d.h. mit einer Leerzeile (nicht zu verwechseln mit einem Leerzeichen). Das nächste Programm zeigt Werte von Arrays an, die durch eine Sequenz mit Auslassung einiger Werte initialisiert wurden (Skript arrayalert.mq4):

//--------------------------------------------------------------------
// arrayalert.mq4
// The code should be used for educational purpose only.
//--------------------------------------------------------------------
int start()                                     // Special funct. start()
  {
   string Mas_s[4] = {"a","b", ,"d"};           // String array
   int Mas_i[6] = { 0,1,2, ,4,5 };              // Integer type array
   Alert(Mas_s[0],Mas_s[1],Mas_s[2],Mas_s[3]);  // Displaying
   Alert(Mas_i[0],Mas_i[1],Mas_i[2],Mas_i[3],Mas_i[4],Mas_i[5]);
   return;                                      // Exit start()
  }
//--------------------------------------------------------------------

"

Letztlich verstehe ich das Konzept der Array-Initialisierung nicht.

 

Sie verstehen das Konzept der Arrays Gedanken richtig? eine Variable mit mehreren Indizes?

Bei der Initialisierung wird lediglich ein Anfangswert für alle Indizes festgelegt.

Du kannst jedem Index einen eigenen Wert zuweisen, wie in den Beispielen, die du gepostet hast, oder,

Wenn Sie möchten, dass der Anfangswert für alle Indizes gleich ist, können Sie den Wert einmal so eingeben,

int myarray[100]={0};   //initializes all 100 indexes to value zero

oder,

int myarray[100][5]={-1}; //multi dimensions, initializes all 500 indexes to -1.

Beachten Sie auch, dass das mql4-Buch einige Fehler enthält. Ich glaube, im zweiten Beispiel, wenn es heißt

"In der initialisierten Sequenz können eine oder mehrere Konstanten weggelassen werden. In einem solchen Fall werden entsprechende Array-Elemente vom numerischen Typ mit Null initialisiert, Elemente von Arrays vom String-Typ werden mit dem String-Wert "" (Anführungszeichen ohne Leerzeichen) initialisiert, d.h. mit einer Leerzeile (nicht zu verwechseln mit einem Leerzeichen)."

und zeigt dann dieses Beispiel,

string Mas_s[4] = {"a","b", ,"d"};           // String array

war es wahrscheinlich so gemeint:

string Mas_s[4] = {"a","b","","d"};           // String array
es sagt auch irgendwo im Buch "alle Arrays sind standardmäßig vom statischen Typ", das ist auch ein Fehler, sie sind wie andere Variablen, nicht statisch, es sei denn, als statisch definiert, außer wenn sie global sind.
 
SDC:

Sie verstehen das Konzept der Arrays Gedanken richtig? eine Variable mit mehreren Indizes?

Bei der Initialisierung wird lediglich ein Startwert für alle Indizes festgelegt.

Wenn Sie möchten, dass der Startwert für alle Indizes derselbe ist, können Sie den Wert einmal wie folgt eingeben

int myarray[100] {0} //initialisiert alle 100 Indizes auf den Wert Null.


Rechts

Ich bin immer noch ein bisschen verwirrt.

Wenn ich also ein Array habe

Double myarray[100]

Ich habe den Array-Typ (double), den Array-Namen (myarray) und die Anzahl der Indizes (100) angegeben.

Kann der Wert des Arrays MyArray mit Double myarray[100] = {1, 2, 3, ....} zugewiesen werden, so dass myarray[1]=1 und myarray[2]=2 ect.

Bisher habe ich Arrays nur für den Zweck konstruiert, Werte aus Schleifen zu holen, und selbst dann wurde das Array nur sehr locker verwendet.

Danke, der Hinweis auf diesen Fehler hat eine kleine Frage geklärt, die ich hatte.

 

Der erste Array-Index ist Null, wenn Sie also,

double myarray[100] = {1,2,3 .....};

Das ergibt: myarray[0] == 1, myarray[1] ==2 usw.

 

Ah richtig ok.

Was ist also, wenn ich ein mehrdimensionales Array habe

Double Myarray[3][4] = {0.1,0.2,0.3,0.4,0.5} (Entschuldigung, ich habe bemerkt, dass ich vorhin Ganzzahlen verwendet habe)

Wie kann ich einen Wert aufrufen?

 

Sie rufen es wie myarray[index,index]; oder myarray[index][index]; auf, was dasselbe bewirkt.

val = myarray[2,2]; //holt den Wert aus array index 2,2 legt ihn in val.

Print(meinArray[2,2]); //druckt ihn aus

Alert(meinArray[2][2]); //meldet es

 

Was wäre der Wert?

Double Myarray[3][4] = {0.1,0.2,0.3,0.4,0.5}

Myarray[1][3]=?

 
Null, weil Sie ihm nichts zugewiesen haben
 

Sie haben ein 3 x 4 Array

double Myarray[3][4] = {0.1,0.2,0.3,0.4,0.5} ;

dann würde es sich so füllen

Myarray[0,0] = 0,1;

Myarray[0,1] = 0.2;

Myarray[0,2] = 0.3;

Myarray[0,3] = 0,4;

Myarray[1,0] = 0,5;

Myarray[1,1] = 0,0;

MeinArray[1,2] = 0,0;

usw.

 
Wie kann array[0,0] einen Wert haben, der für Myarray[3][4] deklariert wurde?
 

Ich bin im Moment ratlos...

Ist Myarray[3][4] nicht mehrdimensional, wenn ja, warum kann ich nur Werte aufrufen, indem ich den Wert von einer der Dimensionen ändere?