Perguntas de um "boneco" - página 123

 
papaklass:

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

Usar ArrayResize e ArrayInitialize.

Normalmente com CopyRates esta estrutura é utilizada.

 
papaklass:

Renat disse que era melhor fazê-lo desta forma:

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

Vamos tentar descobrir. Tanto quanto me lembro, Renat falava em inicializar uma variável simples, não uma matriz. Com batalhas, exemplos semelhantes apareceram no Manual de Referência:

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

Você, por outro lado, tenta rubricar uma matriz em vez de uma simples variável quando a declara. Encontrei este exemplo no Manual:

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

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

A matriz aqui é inicializada com um número finito de valores, e a explicação diz que o compilador determina o tamanho de tal matriz com base no número destes valores. Sou demasiado preguiçoso para verificar - o tamanho da matriz f[] do exemplo é muito provável que seja 6.

Na sua amostra, o tamanho da sequência de iniciação {0} é 1. Consequentemente, o compilador definirá muito provavelmente o tamanho da taxa da matriz[] como 1. Aqui, por uma questão de interesse, especificá-lo desta forma:

MqlRates mrate[] = {0,0,0,0,0,0,0,0,0,0,0,0};    //структура для хранения информации о ценах, объемах и спреде.
Irá causar um erro?
 
papaklass:
Fiquei confuso. Swan explicou-o claramente. Tomei a estrutura errada. Não precisa de ser inicializada de forma alguma porque requer valores. É preciso inicializar os que dão os seus valores. Eu estava errado.

Bem, isso é o principal. A questão sobre Renate era interessante por si só, por isso também descobri algo.

 

duplo f[] = { 0,0, 0,236, 0,382, 0,5, 0,618, 1,0 }; não uma matriz dinâmica.

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

duplo f[] = { 0,0, 0,236, 0,382, 0,5, 0,618, 1,0 }; matriz não dinâmica.

double f[] é uma matriz dinâmica por si só. É esta matriz que é declarada durante a criação. Ainda não analisei se deixará de ser dinâmico depois de o inicializar com a sequência de inicialização finita. A principal coisa que descobriu acima é que a matriz declarada adquire um tamanho particular após a inicialização.

Está a dizer que a matriz dinâmica no resultado da inicialização explícita deixa de ser dinâmica, ou seja, perde o seu estatuto e propriedades dinâmicas? - Talvez sim, mas duvido. Pergunta: com que fundamentos (porquê) um f[] f[] dinâmico deixa de ser um f[] dinâmico?

 
Yedelkin:

O duplo f[] é em si mesmo uma matriz dinâmica. É declarado na criação. Ainda não investiguei se deixa de ser dinâmico após a inicialização pela sequência de inicialização final. A principal coisa que descobriu acima é que a matriz declarada adquire um tamanho particular após a inicialização.

Está a dizer que a matriz dinâmica no resultado da inicialização explícita deixa de ser dinâmica, ou seja, perde o seu estatuto e propriedades dinâmicas? - Talvez sim. Então a questão é: porquê?

A questão é que nós em MKL estamos um pouco "isolados" do mundo real ), o compilador decide por nós em tal situação. Se o vir:

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

cria uma matriz estática (sem a capacidade de a redimensionar). Se o vir:

double f[];

cria a estrutura MqlArrayObject (comporta-se como uma matriz dinâmica), na memória global. Portanto, não pode inicializar um array após declaração (double f[]; f = {6};)

P.S: tudo escrito é o meu IMHO, posso estar errado algures.

 

Pergunta de um boneco: É verdade que se o compilador vê a corda

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

irá inicialmente criar uma matriz estática em vez de uma dinâmica?

Existe uma regra:"Ao declarar um array dinâmico (um array com um valor não especificado no primeiro par de parênteses rectos), o compilador cria automaticamente uma variável estrutural MqlArrayObject(um objecto de array dinâmico) e fornece o código para uma inicialização adequada. Ou será a presença da sequência inicializadora final igual a "especificar explicitamente todas as dimensões significativas da matriz" e leva à criação de uma matriz estática?

 
Yedelkin:

Pergunta de um boneco: É verdade que se o compilador vê a corda

irá inicialmente criar uma matriz estática em vez de uma dinâmica?

Existe uma regra:"Ao declarar um array dinâmico (um array com um valor não especificado no primeiro par de parênteses rectos), o compilador cria automaticamente uma variável estrutural MqlArrayObject(um objecto de array dinâmico) e fornece o código para uma inicialização adequada. Ou será a presença da sequência inicializadora final igual a "especificar explicitamente todas as dimensões significativas da matriz" e leva à criação de uma matriz estática?

É fraco verificá-lo?

;)

 
MetaDriver:

Não acha que deveria verificar?

;)

Neste momento, não há muito. Não chegarei ao terminal antes desta noite. Caso contrário, a minha resposta para 220Volt teria soado diferente, como compreende :) Não consegui encontrar a informação no Manual. Talvez eu não tenha procurado o suficiente, mas meticulosamente.
 
Yedelkin:
Neste momento, é fraca. Não chegarei ao terminal antes desta noite. Caso contrário, a minha resposta a 220Volt teria soado diferente, como compreende :) Não consegui encontrar a informação no Manual. Talvez eu não estivesse a procurar o suficiente, mas estava a ser meticuloso.

OK, estou fora do terminal. :) Estou também fora do terminal.

Verificado elementar - tentando usar o ArrayResize(...)

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