Форум » Синтаксис языка » Объявление массива » Ответить

Объявление массива

sizon56: Сергей, добрый день. Пожалуйста, подскажите, почему при объявлении массива и указания размерности через переменные, выдаются ошибки: 'a' - integer number expected 'd' - variable already defined ']' - comma or semicolon expected 'massiv' - variable not defined Массив создаетяся в скрипте следующим образом: int a=12; int d=12; double massiv[a,d]; С уважением, Алексей.

Ответов - 3

Scriptong: При объявлении массива для указания его размерностей нельзя использовать переменные, т.к. размер массива должен быть вычислен на этапе компиляции программы. Значения переменных (a и b, несмотря на то, что они содержат константу, являются переменными) могут быть вычислены только во время исполнения программы. Если до исполнения программы размер массива вы установить не можете, то используйте другой подход: double massiv[][12]; // Объявление безразмерного массива. До указания размерности использовать нельзя int a = 12; ArrayResize(massiv, a); // Определение размера массива. Теперь его можно использовать Изменять размерность массива можно только в первом его измерении. Поэтому, если массив многомерный, второе и последующие измерения должны быть заданы явно константным значением.

SK: К сожалению, в MQL 4 так делать нельзя. Массив должен быть объявлен жёстко, т.е. размер массива задаётся целочисленными константами. Например: double mass[5,10]; В принципе, в каком-то другом языке может быть разрешение задавать размеры массивов переменными, как это пытались сделать Вы. С точки зрения здравого смысла оба подхода имеют право на жизнь. Но в данном случае мы имеем дело с конкретным языком MQL 4, в который разработчики заложили такое правило. Просто нужно это правило знать и учитывать при построении кода. --- Примите также к сведению, что любые массивы в программе инициализируются один раз. Для изменения размера массива нужно использовать функцию ArrayResize(). Ещё одной важной особенностью массивов является то, что все массивы являются статическими, т.е. сохраняют свои значения после выхода из функции, в которой они были объявлены. При следующем обращении к этой функции массив не инициализируется, а значения элементов массива имеют те значения, что были достигнуты при последнем их изменении.

sizon56: спасибо.




полная версия страницы