Обработка нескольких массивов одной функцией - страница 2

 
muallch:
Integer:
start(){
MyArr1[]={...}
MyArr2[]={...}
 
FunctionForAllArrays(MyArr1);//обрабатываем массив 1
FunctionForAllArrays(MyArr2);//обрабатываем массив 2
 
 
}
 
void FunctionForAllArrays(double & Arr[]){
   ...//здесь работаем с массивом Arr и все что с ним делается происходит с массивом, который указан аргументом при вызове этой функции.
}


Так было бы хорошо, но...

1. Массивы не передаются как аргументы в вызове функции - даже если в описании есть ссылка = &. Вычитано в форуме и хелпе на mql.

2. Кроме того, и в связи с п.1, ссылка в описании функции должна указывать на уже реально существующее имя массива, которое не может варьироваться в процессе выполнения проги.

И кто такую глупость сказал.

А я дурак все время так поступаю, правда в функции еще на всякия случай определяю размер массива, при необходимости его меняю да и много что с ним еще делаю. А оно оказывается и не работает. Просто ужас.

 
Vinin:
muallch:
Integer:
start(){
MyArr1[]={...}
MyArr2[]={...}
 
FunctionForAllArrays(MyArr1);//обрабатываем массив 1
FunctionForAllArrays(MyArr2);//обрабатываем массив 2
 
 
}
 
void FunctionForAllArrays(double & Arr[]){
   ...//здесь работаем с массивом Arr и все что с ним делается происходит с массивом, который указан аргументом при вызове этой функции.
}


Так было бы хорошо, но...

1. Массивы не передаются как аргументы в вызове функции - даже если в описании есть ссылка = &. Вычитано в форуме и хелпе на mql.

2. Кроме того, и в связи с п.1, ссылка в описании функции должна указывать на уже реально существующее имя массива, которое не может варьироваться в процессе выполнения проги.

И кто такую глупость сказал.

А я дурак все время так поступаю, правда в функции еще на всякия случай определяю размер массива, при необходимости его меняю да и много что с ним еще делаю. А оно оказывается и не работает. Просто ужас.


Подколка принимается :\

Надо самому пробовать, и не всегда верить написанному... Бум ваять!

Спасибо!

 
muallch:


Так было бы хорошо, но...

1. Массивы не передаются как аргументы в вызове функции - даже если в описании есть ссылка = &. Вычитано в форуме и хелпе на mql.

2. Кроме того, и в связи с п.1, ссылка в описании функции должна указывать на уже реально существующее имя массива, которое не может варьироваться в процессе выполнения проги.


В документации в разделе Формальные параметры написано:

Существует возможность передавать параметры по ссылке. В этом случае модификация таких параметров отразится на соответствующих переменных в вызываемой функции, переданных по ссылке. Нельзя передавать по ссылке элементы массивов. Параметры по ссылке можно передавать только в пределах одного модуля, для библиотечных функций такая возможность не предусмотрена. Для того чтобы указать, что параметр передается по ссылке, после типа данных необходимо поставить модификатор &.

Пример:

void func(int& x, double& y, double& z[])
{
double calculated_tp;
...
for(int i=0; i<OrdersTotal(); i++)
{
if(i==ArraySize(z)) break;
if(OrderSelect(i)==false) break;
z[i]=OrderOpenPrice();
}
x=i;
y=calculated_tp;
}

Массивы также можно передавать по ссылке, все изменения отразятся в исходном массиве.

В отличие от простых параметров массивы можно передавать по ссылке и в библиотечные функции.

Параметры, передаваемые по ссылке, нельзя инициализировать значениями по умолчанию.

В функцию нельзя передать больше 64 параметров.

 
Rosh:
muallch:


Так было бы хорошо, но...

1. Массивы не передаются как аргументы в вызове функции - даже если в описании есть ссылка = &. Вычитано в форуме и хелпе на mql.

2. Кроме того, и в связи с п.1, ссылка в описании функции должна указывать на уже реально существующее имя массива, которое не может варьироваться в процессе выполнения проги.


В документации в разделе Формальные параметры написано:

Существует возможность передавать параметры по ссылке. В этом случае модификация таких параметров отразится на соответствующих переменных в вызываемой функции, переданных по ссылке. Нельзя передавать по ссылке элементы массивов. Параметры по ссылке можно передавать только в пределах одного модуля, для библиотечных функций такая возможность не предусмотрена. Для того чтобы указать, что параметр передается по ссылке, после типа данных необходимо поставить модификатор &.

Пример:

void func(int& x, double& y, double& z[])
{
double calculated_tp;
...
for(int i=0; i<OrdersTotal(); i++)
{
if(i==ArraySize(z)) break;
if(OrderSelect(i)==false) break;
z[i]=OrderOpenPrice();
}
x=i;
y=calculated_tp;
}

Массивы также можно передавать по ссылке, все изменения отразятся в исходном массиве.

В отличие от простых параметров массивы можно передавать по ссылке и в библиотечные функции.

Параметры, передаваемые по ссылке, нельзя инициализировать значениями по умолчанию.

В функцию нельзя передать больше 64 параметров.

Исчерпывающе. Вопрос закрыт.