к примеру есть массив в главной функции main, как его можно использовать в другой функции?
main()
{
doublearray[4][4];
...
...
}
прошу готовый пример с двумерным массивом 4х4, потому как в интернете не смог найти именно примера.
Другие языки программирования и технологии
Каким образом в c++ можно передать двумерный массив в фунцкию?
легко
void function(int[4][4] input){}
void function(int[4][4] input){}
можешь передать через указатель...
Возможна передача по значению: funct(array);
void funct(double a[][])
{
....
v=a[1][1];
}
Для изменения массива в функции нужно передавать через указатель.
void funct(double a[][])
{
....
v=a[1][1];
}
Для изменения массива в функции нужно передавать через указатель.
// Что такое массивы вообще знаете?
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 ]
}
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 ]
}
Передаешь указатель на массив и размеры. Лучше сразу напиши класс-враппер.
Похожие вопросы
- Как можно передать ДВУМЕРНЫЙ массив в функцию в С++, не создавая его, как глобальный. Пример ниже:
- помогите срочно надо Квадратные массивы тема: Двумерные массивы на языке C++
- .помогите пожалуйста двумерный массив на языке c++
- Сформировать двумерный массив C++
- дан двумерный массив С(3,4).Получите новый массив А путём увеличения всех элементов исходного массива на число С.
- Необходимо упорядочить строки двумерного массива, по возрастанию первого эл-та. СИ.
- Что такое Двумерный массив?
- Ассемблер двумерный массив
- Помогите решить задачу на C++. Двумерные массивы.
- Двумерный массив с++ Пожалуйста =(