Массивы.

 

Добрый день. Подскажите. MQL поддерживает такое ? У меня не компилируется.

Если нет. То есть ли способы ?


int ff(int d){

      double c[d];
      double a[d];
 
Не получится. Размерност нельзя задавать переменной, НО можно воспользоваться https://docs.mql4.com/ru/array/ArrayResize
 
Благадарю
 
acheshkov >>:

Добрый день. Подскажите. MQL поддерживает такое ? У меня не компилируется.

Если нет. То есть ли способы ?




Есть, можно обьявить массив а размерность задать после:

double c[]; 
int start()
{int d=2*2;
 ArrayResize(c,d);
return(0);
}

гдето так.

 

есть существенный момент в работе с массивами..

перед тем как задавать "рабочий" размер массива его необходимо "занулить", т.е.

ArrayResize(c,0);

а после уже

ArrayResize(c,d);

в противном случае будут ошибки, даже если массив находится в функции и в ней он объявлен и изменяется его размер без зануления..


первый раз при вызове функции все корректно отработает, а при повторном вызове функции побудут косячки непредвиденные..

 
2-хмерные и т.д.  как тогда или нельзя?
 
keekkenen >>:

есть существенный момент в работе с массивами..

перед тем как задавать "рабочий" размер массива его необходимо "занулить", т.е.

а после уже

в противном случае будут ошибки, даже если массив находится в функции и в ней он объявлен и изменяется его размер без зануления..


первый раз при вызове функции все корректно отработает, а при повторном вызове функции побудут косячки непредвиденные..

нет, не нужно.

 

А если я объявил его так то тоже надо обнулять размер ?

double c[];
 
gumgum >>:
2-хмерные и т.д. как тогда или нельзя?

С двумерными сложнее, чтоб не париться их советую применять прямым объявлением размера без изменений (скажем так проще).

Хотя если есть необходимость то можно изменить и двумерный но нужно не забывать что в нём меняеться все размеры во втором измерении а не только тот что вызывался ну короче лучше не трожте их без особой надобности.

 
Urain >>:

нет, не нужно.

дело хозяйское - делать так или нет, только ошибки действительно имеют место быть, проверено..

 
acheshkov >>:

А если я объявил его так то тоже надо обнулять размер ?

Не нужно ничего обнулять просто указываете новый размер и всё даже данные сохраняються.

Бывают проги когда нужно искать максимум массива а размер неясен зарание ну по условию задаёться так вот увеличиваешь размер на каждой итерации и всё норм а после выхода из цикла ведёшь поиск максимума по всему массиву тк он задан полседней итерацией то пустых или лишних данных на содержит то можно смело писать по умолчанию поиск во всём массиве.

Причина обращения: