Questions d'un "mannequin - page 123

 
papaklass:

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

Utilisez ArrayResize et ArrayInitialize.

Cette structure est généralement utilisée avec les CopyRates.

 
papaklass:

Renat a dit que c'était mieux de faire comme ça :

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

Essayons d'y voir clair. Autant que je me souvienne, Renat parlait de l'initialisation d'une simple variable, pas d'un tableau. Avec des batailles, des exemples similaires sont apparus dans le manuel :

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

Vous, par contre, essayez d'initialiser un tableau, et non une simple variable, en le déclarant. J'ai trouvé cet exemple dans le manuel :

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

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

Le tableau est ici initialisé avec un nombre fini de valeurs, et l'explication dit que le compilateur détermine la taille d'un tel tableau en se basant sur le nombre de ces valeurs. Je suis trop paresseux pour le vérifier - la taille du tableau f[] de l'exemple est très probablement de 6.

Dans votre échantillon, la taille de la séquence d'initialisation {0} est de 1. Par conséquent, le compilateur définira très probablement la taille du tableau mrate[] comme étant 1. Ici, par souci d'intérêt, spécifiez-le de cette façon :

MqlRates mrate[] = {0,0,0,0,0,0,0,0,0,0,0,0};    //структура для хранения информации о ценах, объемах и спреде.
Cela provoquera-t-il une erreur ?
 
papaklass:
J'étais confus. Swan l'a expliqué clairement. J'ai pris la mauvaise structure. Il n'a pas besoin d'être initialisé du tout car il prend des valeurs. Vous devez initialiser ceux qui donnent leurs valeurs. J'avais tort.

Eh bien, c'est le principal. La question sur Renate était intéressante en soi, alors j'ai aussi compris quelque chose.

 

double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 } ; pas un tableau dynamique.

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

double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 } ; tableau non-dynamique.

Le double f[] est un tableau dynamique en soi. C'est ce tableau qui est déclaré lors de la création. Je n'ai pas analysé si elle cessera d'être dynamique après l'avoir initialisée avec la séquence d'initialisation finie. La principale chose que vous avez découverte ci-dessus est que le tableau déclaré acquiert une taille particulière après l'initialisation.

Voulez-vous dire que le tableau dynamique résultant d'une initialisation explicite cesse d'être dynamique, c'est-à-dire qu'il perd son statut et ses propriétés dynamiques ? - Peut-être, mais j'en doute. Question : pour quelle raison un tableau dynamique double f[] cesse-t-il d'être un tableau dynamique ?

 
Yedelkin:

Le double f[] est lui-même un tableau dynamique. Elle est déclarée à la création. Je n'ai pas cherché à savoir si elle cesse d'être dynamique après l'initialisation par la séquence d'initialisation finale. La principale chose que vous avez découverte ci-dessus est que le tableau déclaré acquiert une taille particulière après l'initialisation.

Voulez-vous dire que le tableau dynamique résultant d'une initialisation explicite cesse d'être dynamique, c'est-à-dire qu'il perd son statut et ses propriétés dynamiques ? - Peut-être. Alors la question est : pourquoi ?

Le fait est que nous, en MKL, sommes un peu "isolés" du monde réel ;)), le compilateur décide pour nous dans une telle situation. Si elle le voit :

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

crée un tableau statique (sans possibilité de le redimensionner). Si elle le voit :

double f[];

crée la structure struct MqlArrayObject (elle se comporte comme un tableau dynamique), dans la mémoire globale. Par conséquent, vous ne pouvez pas initialiser un tableau après la déclaration (double f[] ; f = {6} ;)

P.S. : tout ce qui est écrit est mon IMHO, je peux me tromper quelque part.

 

Question d'un imbécile : Est-il vrai que si le compilateur voit la chaîne de caractères

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

il créera initialement un tableau statique au lieu d'un tableau dynamique ?

Il existe une règle :"Lors de la déclaration d'un tableau dynamique (un tableau avec une valeur non spécifiée dans la première paire de crochets), le compilateur crée automatiquement une variable struct MqlArrayObject(un objet de tableau dynamique) et fournit du code pour une initialisation correcte. Ou la présence de la séquence d'initialisation finale équivaut-elle à "spécifier explicitement toutes les dimensions significatives du tableau" et conduit-elle à la création d'un tableau statique ?

 
Yedelkin:

Question d'un imbécile : Est-il vrai que si le compilateur voit la chaîne de caractères

il créera initialement un tableau statique au lieu d'un tableau dynamique ?

Il existe une règle :"Lors de la déclaration d'un tableau dynamique (un tableau avec une valeur non spécifiée dans la première paire de crochets), le compilateur crée automatiquement une variable struct MqlArrayObject(un objet de tableau dynamique) et fournit du code pour une initialisation correcte. Ou la présence de la séquence d'initialisation finale équivaut-elle à "spécifier explicitement toutes les dimensions significatives du tableau" et conduit-elle à la création d'un tableau statique ?

Est-il faible de le vérifier ?

;)

 
MetaDriver:

Vous ne pouvez pas vérifier ?

;)

Pas grand-chose pour le moment. Je n'arriverai pas au terminal avant ce soir. Sinon ma réponse pour le 220Volt serait différente, comme vous le comprenez :) Je n'ai pas trouvé l'information dans le manuel. Peut-être que je n'ai pas regardé assez fort, mais méticuleusement.
 
Yedelkin:
Pour le moment, c'est faible. Je n'arriverai pas au terminal avant ce soir. Sinon ma réponse à 220Volt aurait été différente, comme vous le comprenez :) Je n'ai pas trouvé l'information dans le manuel. Peut-être que je ne cherchais pas assez, mais j'étais méticuleux.

OK, je suis sorti du terminal. :) Je suis également à l'extérieur du terminal.

Élémentaire vérifié - j'essaie d'utiliser ArrayResize(...)

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