double Buffer[4][];
int init(){
for( int i=0;i<4;i++){
SetIndexBuffer( i, Buffer[i+1] ); // или SetIndexBuffer( i, Buffer[i+1] []); ?????
}
return(0);
}
int start()
{
int limit;
int counted_bars=IndicatorCounted();
if (counted_bars<0) return (-1);
if (counted_bars>0) counted_bars--;
limit=(Bars-counted_bars)-1;
//---- indicator calculation
for(int i=limit; i>=0; i--){
for(int k = 1; k<=4; k++) {
Buffer[k][i]= ................... ;
}
}
//----
return(0);
}
только все равно не работает :((((
Так неправильно. Используйте точный и правильный способ работы с массивами без всяких хакерских штучек.
я пробовал и SetIndexBuffer( i, Buffer[i+1][] ); - если это адекватно С, то это должно быть тоже самое, что и bufer[] для одномерного массива. или я ошибаюсь ? если не сложно подскажите пожалуйста....
Потому что использование "подразумеваемого" адресного доступа в защищенном языке (MQL 4 есть С без адресной арифметики) и есть "хакерская штучка".
есть функция и массивы:
int funk( double aray[]);
double d_array1[];
double d_array2[];
double d_array3[];
double d_array4[];
int init() {
funk(d_array1);
funk(d_array2);
funk(d_array3);
funk(d_array4);
return(0);
}
- так получается правильно - и все работает, но если выводить, например все 8 линий, то хотелось бы использовать цикл, а не копировать 8 раз. В экспертах эта цифра может быть многократно больше и как тогда там ?
int funk( double aray[]);
double dd_array[8][];// по аналогии с одномерным массивом описываем 2-мерный из 8-ми строк
int init(){
for(int i= 0; i<8;i++){
funk(dd_array[i]);
}
return(0);
}
казалось бы логично - здесь используется имя строки в качестве имени одномерного массива ( и по стандарту C, С++ так), но компилер не пропускает, а пропускает так :
int funk( double aray[]);
double dd_array[8][];
int init(){
for(int i= 0; i<8;i++){
funk(dd_array[i][]);
}
return(0);
}
и не логично и не работает.
Собственно вопрос - если в качестве параметра в функцию передается одномерный массив (копированием или по ссылке), то можно ли туда (в эту функцию) в качестве параметра передать строку двух (или более мерного) массива и как это правильно сделать. Или можно передать только одномерный массив и все ?
С уважением, Владислав.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Собственно в чем вопрос: "Будут ли эквивалентными следующие куски кода ?"
этот
double Buffer1[]; double Buffer2[]; double Buffer3[]; double Buffer4[]; int init(){ SetIndexBuffer(0,Buffer1); SetIndexBuffer(1,Buffer2); SetIndexBuffer(2,Buffer3); SetIndexBuffer(3,Buffer4); .......................................... return(0); } int start() { int limit; int counted_bars=IndicatorCounted(); if (counted_bars<0) return (-1); if (counted_bars>0) counted_bars--; limit=(Bars-counted_bars)-1; //---- indicator calculation for(int i=limit; i>=0; i--){ Buffer1[i]= ................... ; Buffer2[i]= ................... ; Buffer3[i]= ................... ; Buffer4[i]= ................... ; } //---- return(0); }так работает :)
и такой
double Buffer[4][]; int init(){ for( int i=0;i<4;i++){ SetIndexBuffer( i, Buffer[i+1] ); // или SetIndexBuffer( i, Buffer[i+1] []); ????? } return(0); } int start() { int limit; int counted_bars=IndicatorCounted(); if (counted_bars<0) return (-1); if (counted_bars>0) counted_bars--; limit=(Bars-counted_bars)-1; //---- indicator calculation for(int i=limit; i>=0; i--){ for(int k = 1; k<=4; k++) { MapBuffer[k][i]= ................... ; } } //---- return(0); }это не работает :(
и если не будут, то как правильно ?
И вообще есть ли возможность работать с многомерными массивами так как это организовано в Си, С++ ?
Спасибо...