Domande da un "manichino" - pagina 123

 
papaklass:

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

Usate ArrayResize e ArrayInitialize.

Di solito con CopyRates si usa questa struttura.

 
papaklass:

Renat ha detto che era meglio fare così:

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

Cerchiamo di capirlo. Per quanto mi ricordo, Renat stava parlando di inizializzare una semplice variabile, non un array. Con battaglie esempi simili sono apparsi nel manuale:

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

Tu, invece, cerchi di inizializzare un array piuttosto che una semplice variabile quando la dichiari. Ho trovato questo esempio nel Manuale:

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

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

L'array qui è inizializzato con un numero finito di valori, e la spiegazione dice che il compilatore determina la dimensione di tale array basandosi sul numero di questi valori. Sono troppo pigro per controllarlo - la dimensione dell'array f[] dell'esempio è molto probabilmente 6.

Nel vostro esempio, la dimensione della sequenza di inizializzazione {0} è 1. Di conseguenza, il compilatore molto probabilmente definirà la dimensione dell'array mrate[] come 1. Qui, per interesse, lo specifichiamo in questo modo:

MqlRates mrate[] = {0,0,0,0,0,0,0,0,0,0,0,0};    //структура для хранения информации о ценах, объемах и спреде.
Causerà un errore?
 
papaklass:
Ero confuso. Swan lo ha spiegato chiaramente. Ho preso la struttura sbagliata. Non ha bisogno di essere inizializzato perché prende dei valori. Dovete inizializzare quelli che danno i loro valori. Mi sbagliavo.

Beh, questa è la cosa principale. La domanda su Renate era interessante di per sé, quindi anche io ho capito qualcosa.

 

double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; non un array dinamico.

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

double f[] = { 0,0, 0,236, 0,382, 0,5, 0,618, 1,0 }; array non dinamico.

double f[] è un array dinamico da solo. È questo array che viene dichiarato durante la creazione. Non ho analizzato se smetterà di essere dinamico dopo averlo inizializzato con la sequenza di inizializzazione finita. La cosa principale che avete scoperto sopra è che l'array dichiarato acquisisce una dimensione particolare dopo l'inizializzazione.

Stai dicendo che l'array dinamico nel risultato dell'inizializzazione esplicita smette di essere dinamico, cioè perde il suo stato dinamico e le sue proprietà? - Forse sì, ma ne dubito. Domanda: su quali basi (perché) un array dinamico doppio f[] smette di essere un array dinamico?

 
Yedelkin:

double f[] è esso stesso un array dinamico. È dichiarato alla creazione. Non ho indagato se smette di essere dinamico dopo l'inizializzazione da parte della sequenza di inizializzazione finale. La cosa principale che avete scoperto sopra è che l'array dichiarato acquisisce una dimensione particolare dopo l'inizializzazione.

Stai dicendo che l'array dinamico nel risultato dell'inizializzazione esplicita smette di essere dinamico, cioè perde il suo stato dinamico e le sue proprietà? - Forse sì, ma allora la domanda è: perché?

Il punto è che noi in MKL siamo un po' "isolati" dal mondo reale )), il compilatore decide per noi in una tale situazione. Se lo vede:

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

crea un array statico (senza la possibilità di ridimensionarlo). Se lo vede:

double f[];

crea la struttura struct MqlArrayObject (si comporta come un array dinamico), nella memoria globale. Pertanto, non potete inizializzare un array dopo la dichiarazione (double f[]; f = {6};)

P.S: tutto ciò che è scritto è il mio IMHO, potrei sbagliarmi da qualche parte.

 

Domanda di uno stupido: è vero che se il compilatore vede la stringa

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

creerà inizialmente un array statico invece di uno dinamico?

C'è una regola:"Quando si dichiara un array dinamico (un array con un valore non specificato nella prima coppia di parentesi quadre), il compilatore crea automaticamente una variabile struct MqlArrayObject(un oggetto array dinamico) e fornisce il codice per una corretta inizializzazione. O la presenza della sequenza di inizializzazione finale è uguale a "specificare esplicitamente tutte le dimensioni significative dell'array" e porta alla creazione di un array statico?

 
Yedelkin:

Domanda di uno stupido: è vero che se il compilatore vede la stringa

creerà inizialmente un array statico invece di uno dinamico?

C'è una regola:"Quando si dichiara un array dinamico (un array con un valore non specificato nella prima coppia di parentesi quadre), il compilatore crea automaticamente una variabile struct MqlArrayObject(un oggetto array dinamico) e fornisce il codice per una corretta inizializzazione. O la presenza della sequenza di inizializzazione finale è uguale a "specificare esplicitamente tutte le dimensioni significative dell'array" e porta alla creazione di un array statico?

È debole controllarlo?

;)

 
MetaDriver:

Non puoi controllare?

;)

Non molto al momento. Non arriverò al terminal fino a questa sera. Altrimenti la mia risposta per 220Volt suonerebbe diversa, come capisci :) Non sono riuscito a trovare le informazioni nel Manuale. Forse non ho cercato abbastanza, ma meticolosamente.
 
Yedelkin:
Al momento è debole. Non arriverò al terminal fino a questa sera. Altrimenti la mia risposta a 220Volt sarebbe suonata diversa, come si capisce :) Non sono riuscito a trovare le informazioni nel Manuale. Forse non stavo cercando abbastanza, ma ero meticoloso.

OK, sono fuori dal terminale. :) Sono anche fuori dal terminale.

Controllato elementare - cercando di usare ArrayResize(...)

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