Preguntas de un "tonto" - página 123

 
papaklass:

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

Utilice ArrayResize y ArrayInitialize.

Normalmente con CopyRates se utiliza esta estructura.

 
papaklass:

Renat dijo que era mejor hacerlo así:

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

Intentemos resolverlo. Que yo recuerde, Renat hablaba de inicializar una variable simple, no un array. Con las batallas aparecieron ejemplos similares en el Manual:

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

Tú, por el contrario, al declararlo estás tratando de inicializar un array, no una simple variable. Encontré este ejemplo en el Manual:

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

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

El array aquí se inicializa con un número finito de valores, y la explicación dice que el compilador determina el tamaño de dicho array basándose en el número de estos valores. Me da pereza comprobarlo - el tamaño del array f[] del ejemplo es muy probable que sea 6.

En su ejemplo, el tamaño de la secuencia de inicialización {0} es 1. En consecuencia, lo más probable es que el compilador defina el tamaño del array mrate[] como 1. Aquí, por el interés, se especifica de esta manera:

MqlRates mrate[] = {0,0,0,0,0,0,0,0,0,0,0,0};    //структура для хранения информации о ценах, объемах и спреде.
¿Causará un error?
 
papaklass:
Estaba confundido. Swan lo explicó claramente. Tomé la estructura equivocada. No necesita ser inicializado en absoluto porque toma valores. Hay que inicializar los que dan sus valores. Me equivoqué.

Bueno, eso es lo principal. La pregunta sobre Renate era interesante en sí misma, así que también me imaginé algo.

 

double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; no es un array dinámico.

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

double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; array no dinámico.

double f[] es un array dinámico por sí mismo. Esta matriz es la que se declara durante la creación. No he analizado si dejará de ser dinámico después de inicializarlo con la secuencia de inicialización finita. Lo principal que has descubierto arriba es que el array declarado adquiere un tamaño determinado después de la inicialización.

¿Estás diciendo que el array dinámico en el resultado de una inicialización explícita deja de ser dinámico, es decir, pierde su estado y propiedades dinámicas? - Puede que sí, pero lo dudo. Pregunta: ¿en qué se basa (por qué) que un array dinámico doble f[] deje de ser un array dinámico?

 
Yedelkin:

double f[] es a su vez un array dinámico. Se declara en la creación. No he investigado si deja de ser dinámico después de la inicialización por la secuencia final de inicialización. Lo principal que has descubierto arriba es que el array declarado adquiere un tamaño determinado después de la inicialización.

¿Estás diciendo que el array dinámico en el resultado de la inicialización explícita deja de ser dinámico, es decir, pierde su estado y propiedades dinámicas? - Puede que sí. Entonces la pregunta es: ¿por qué?

La cuestión es que en MKL estamos un poco "aislados" del mundo real)), el compilador decide por nosotros en tal situación. Si lo ve:

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

crea un array estático (sin posibilidad de redimensionarlo). Si lo ve:

double f[];

crea la estructura MqlArrayObject (se comporta como un array dinámico), en la memoria global. Por lo tanto, no se puede inicializar un array después de la declaración (double f[]; f = {6};)

P.D: todo lo escrito es mi IMHO, puedo estar equivocado en algún punto.

 

Pregunta de un tonto: ¿Es cierto que si el compilador ve la cadena

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

¿creará inicialmente una matriz estática en lugar de una dinámica?

Existe una regla:"Al declarar un array dinámico (un array con un valor no especificado en el primer par de corchetes), el compilador crea automáticamente una variable struct MqlArrayObject(un objeto de array dinámico) y proporciona código para su correcta inicialización. ¿O la presencia de la secuencia de inicialización final equivale a "especificar explícitamente todas las dimensiones significativas del array" y conduce a la creación de un array estático?

 
Yedelkin:

Pregunta de un tonto: ¿Es cierto que si el compilador ve la cadena

¿creará inicialmente una matriz estática en lugar de una dinámica?

Existe una regla:"Al declarar un array dinámico (un array con un valor no especificado en el primer par de corchetes), el compilador crea automáticamente una variable struct MqlArrayObject(un objeto de array dinámico) y proporciona código para su correcta inicialización. ¿O la presencia de la secuencia de inicialización final equivale a "especificar explícitamente todas las dimensiones significativas del array" y conduce a la creación de un array estático?

¿Es débil para comprobarlo?

;)

 
MetaDriver:

¿No crees que deberías comprobarlo?

;)

No mucho por el momento. No llegaré a la terminal hasta esta noche. De lo contrario, mi respuesta para 220Volt habría sonado diferente, como usted entiende :) No pude encontrar la información en el Manual. Tal vez no busqué lo suficiente, pero meticulosamente.
 
Yedelkin:
Por el momento, es débil. No llegaré a la terminal hasta esta noche. De lo contrario, mi respuesta a 220Volt habría sonado diferente, como comprenderás :) No he podido encontrar la información en el Manual. Tal vez no estaba buscando lo suficiente, pero estaba siendo meticuloso.

Bien, estoy fuera de la terminal. :) Yo también estoy fuera de la terminal.

Comprobado elemental - tratando de utilizar ArrayResize(...)

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