Можно ли передать массив в функцию по схеме указатель на указатель?

 
Как создать указатель указывающий на массив и через этот указатель передать массив в функцию, возможно ли подобное?
 
Seric29:
Как создать указатель указывающий на массив и через этот указатель передать массив в функцию, возможно ли подобное?

Можно, через класс-обертку над массивом передавать в функцию указатель на класс.

 
Sergey Dzyublik:

Можно, через класс-обертку над массивом передавать в функцию указатель на класс.

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

 
Seric29:

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

Элементарно

class CArray : public Cobject // можно и не наследоваться
{
public:
    double m_Array[100];
}

где-то в коде...

Carray *arr = new CArray;
arr.m_Array[22] = 1.23456;

void GetArr(Carray *_arr)
{
    double data = _arr.m_Array[22];
}
 
Alexey Volchanskiy:

Элементарно

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

Оператор не применяется для создания массивов объектов. Я записал так

#property version   "1.00"
#property strict
string iComments="\n 
 class CArray : public Cobject 
{
public:
    double m_Array[100];
}//дальше в OnInit()
 {Carray *arr = new CArray;
   arr.m_Array[22] = 1.23456;

....
}

Ошибок мама не горюй. Может нужно расписать класс?

 
Seric29:

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

new, потому что это главное условие задачи - использование указателя.

С разной размерностью не получится. Уже пробовали. Шаблонная функция откомпилируется, но записать вызов функции, пр компиляции будет ошибка.

 
Dmitry Fedoseev:

С разной размерностью не получится. Уже пробовали. Шаблонная функция откомпилируется, но записать вызов функции, пр компиляции будет ошибка.

Понятно значит тут либо использовать высокомерные массивы чтобы они были одного типа или запись в файл. В с++ это возможно там есть доступ к памяти вот пример

#include "stdafx.h"
#include <conio.h>
#include <iostream>

using std::cout;
using std::endl;
using std::cin;

template<typename T> void Fun(T a[],size_t m=2,size_t n=2, T r=0)
{
        for ( size_t i = 0; i < m; i++ )
    {
        for ( size_t j = 0; j < n; j++ ) 
                        {
                    (a[i * n + j ])=(a[i * n + j ])*5;
                        cout <<(a[i * n + j ])<<" "<<endl;
                    }
        }cout<<endl; 
}

int _tmain(int argc, _TCHAR* argv[])
{
        int     mas[6]={1,2,3,4,5,6};
        double mas1[2][2]={{1.4,4.2},{2.8,6.7}};//int //{{},{}};
        int mas2[2][2][2];

        Fun(*mas1);//Для 2умерного массива передача по ссылке, но в mql4 все массивы передаются по ссылке 
        Fun((mas),6,1);
        for(int i=0;i<2;i++)
        {for(int t=0;t<2;t++)
        {cout<<mas1[i][t]<<" "<<endl;}}
        _getch();
        return 0;
}

Это всё хорошо но проблема в том что с++ не позволяет экспортировать шаблонные функции, получается нужно экспортировать каждый тип отдельно а из-за этого писать dll библиотеку не имеет никакого смысла.

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