Всем привет! Как вернуть массив в функции?
Не видел такого примера в учебнике, интуитивно пытался разные варианты проделать наподобие этого:
double[] Test() {
}
Но не получилось )
Можно только передать в функцию по ссылке массив который будет изменён
double A[3] = {1, 2, 3}; test(A); void test(double &B) { for(int i = 0; i < ArraySize(B); i++) B[i] += 2; }В результате получишь массив А со значениями 3, 4, 5
ааа. Жаль, но хоть так. Спасибо!
Еще такой вопрос возникает. Вот я для удобства захотел сделать функцию ArrayPush, для добавления нового элемента в массив. И не понятно как мне объявить аргумент массива, если я заранее не знаю его тип? Это значит не судьба такую функцию сделать?
Еще такой вопрос возникает. Вот я для удобства захотел сделать функцию ArrayPush, для добавления нового элемента в массив. И не понятно как мне объявить аргумент массива, если я заранее не знаю его тип? Это значит не судьба такую функцию сделать?
В MQL4++ есть шаблоны функций:
#property strict /******************************************************************************/ template <typename T> void print(const T &array[]) { const int size = ArraySize(array); Print("array size = ", size); for (int i = 0; i < size; i++) { Print("array[", i, "] = ", array[i]); } } /******************************************************************************/ template <typename T> bool ArrayPush(T &array[], const T item) { const int size = ArraySize(array); if (ArrayResize(array, size + 1) != size + 1) { return false; } array[size] = item; return true; } /******************************************************************************/ void OnStart( void ) { int a1[3] = {2, 3, 4}; double a2[3] = {1, 2, 2.71828}; print(a1); print(a2); if (!ArrayPush(a1, 7)) { Print("Не удалось выполнить ArrayPush!"); } if (!ArrayPush(a2, 3.14159)) { Print("Не удалось выполнить ArrayPush!"); } print(a1); print(a2); }
Результат:
Script 3 EURUSDm,H1: loaded successfully 3 EURUSDm,H1: initialized 3 EURUSDm,H1: array size = 3 3 EURUSDm,H1: array[0] = 2 3 EURUSDm,H1: array[1] = 3 3 EURUSDm,H1: array[2] = 4 3 EURUSDm,H1: array size = 3 3 EURUSDm,H1: array[0] = 1.0 3 EURUSDm,H1: array[1] = 2.0 3 EURUSDm,H1: array[2] = 2.71828 3 EURUSDm,H1: array size = 4 3 EURUSDm,H1: array[0] = 2 3 EURUSDm,H1: array[1] = 3 3 EURUSDm,H1: array[2] = 4 3 EURUSDm,H1: array[3] = 7 3 EURUSDm,H1: array size = 4 3 EURUSDm,H1: array[0] = 1.0 3 EURUSDm,H1: array[1] = 2.0 3 EURUSDm,H1: array[2] = 2.71828 3 EURUSDm,H1: array[3] = 3.14159 3 EURUSDm,H1: uninit reason 0 Script 3 EURUSDm,H1: removed
Напрямую массив вернуть нельзя, но, если сильно хочется, то - можно, правда, "накривую".
Массив можно обернуть классом, и тогда - можно, но в составе класса. Получается очень неуклюже и неудобно.
PS. На самом деле ArrayResize() может отработать неуспешно, и это надо проверять. Соответственно, ArrayPush() тоже может отработать неуспешно и это надо проверять в коде, который будет вызывать ArrayPush(). Сначала без проверок сделал, но так нельзя, иначе "array[size] = item;" неправомерно было бы исполнять, поэтому отяготил проверками.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет! Как вернуть массив в функции?
Не видел такого примера в учебнике, интуитивно пытался разные варианты проделать наподобие этого:
double[] Test() {
}
Но не получилось )