Другие языки программирования и технологии

Каким образом в c++ можно передать двумерный массив в фунцкию?

к примеру есть массив в главной функции main, как его можно использовать в другой функции?
main()
{
doublearray[4][4];
...
...
}

прошу готовый пример с двумерным массивом 4х4, потому как в интернете не смог найти именно примера.
легко
void function(int[4][4] input){}
ДК
Даурен Куанышбек
816
Лучший ответ
можешь передать через указатель...
Возможна передача по значению: funct(array);
void funct(double a[][])
{
....
v=a[1][1];

}

Для изменения массива в функции нужно передавать через указатель.
Вадим Тарасюк
Вадим Тарасюк
35 996
// Что такое массивы вообще знаете?

void Fun(int A[4]);
void Fun2(int *A, int size);
void Fun3(int *A, int sizeY, int sizeX);

int main()
{
int a, b, c, d;
// Это просто четыре отдельных переменных, имеющих собственное имя

int M[4];
// Это тоже четыре переменных, но не имеющих собственного имени,
// и с дополнительными требованиями по размещению их в памяти.
// А именно - они расположены последовательно друг за другом.
// Имя M трактуется как указатель (адрес) на первую переменную.
// Индексируются переменные начиная с 0. (Индекс первой переменной = 0)
// Для получения адреса остальных переменных используется простая формула
// адрес M[ i ] = адрес M[ 0 ] + i * sizeof(M[ 0 ])
// M[ i ] именно так и трактуется компилятором

// двухмерных и многомерных массивов не существует, потому что оперативная память одномерна.

int Т [5][4];
// Трактуется как массив массивов int[4]. Сначала один массив (четыре переменных) , потом второй, третий, четвертый и пятый
// Все переменные так же расположены последовательно друг за другом. Но вот адлес переменных
// расчитывается чуть сложнее. Сначала по первому индексу определяется адрес массива int[4],
// в который входит переменная, а затем по второму индексу адрес переменной внутри этого массива
// адрес Т [ i ][ j ] = адрес Т [ 0 ][ 0 ] + i * sizeof(int[4]) + j

// Массивы никогда не передавались в функцию по значению, передается указатель на первую переменную массива.
// Чтобы убедить в этом сделайте простой эксперимент
M[2] = 0;
printf("M[2] = %d", M[2); // M[2] имеет значение равное 0

Fun(M[2]);
printf("M[2] = %d", M[2); // M[2] имеет значение равное 5
// Если бы массив передавался по значению, то A[2] остался бы равным 0, а он стал равным 5.
// Что говорит о том, что он был передан не по значению, а по ссылке

// Все синтаксические конструкции типа fun(int a[]), fun(int a[4]), fun(int a[][4]), fun(int a[4][4])
// по сути своей есть синонимы fun(int *a);
// Внутри функции вы будете иметь только указатель на первый элемент массива.
// Но для работы с массивом нужно еще знать его размер (количество элементов)
// Если в пределах зоны видимости определения массива это можно определить через sizeof,
// то внутри функции этого сделать нельзя, поэтому кроме указателя нужно передавать в функцию
// размер массива. А для (псевдо) двухмерного массива - два размера, и использовать формулу для
// вычисления индекса. И так далее.

Fun3(T, 5, 4);

return 0;
}

void Fun(int A[4])
{
A[2] = 5;
}

void Fun2(int *A, int size)
{
int i;
A[ i ];
}

void Fun3(int *A, int sizeY, int sizeX)
{
int i, j;
A[ i * sizeX + j ]; // A[ i ][ j ]
}
Олег Полищук
Олег Полищук
21 360
Передаешь указатель на массив и размеры. Лучше сразу напиши класс-враппер.
Дима Поздеев
Дима Поздеев
1 058