Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
#1

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

18.02.2010, 01:34. Просмотров 1431. Ответов 20
Метки нет (Все метки)

Возник вопрос, какими способами можно передать многомерные массивы в функцию???
Если не сложно, приведите парочку примеров
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2010, 01:34     Какими способами можно передать многомерные массивы в функцию?
Посмотрите здесь:

Передача массивов в функцию (многомерные массивы) - C++
Вычислить с использованием функции max элементы каждой строки матрицы A(10,20). Результаты формировать в одномерных массивах C(10) и D(10)....

Передача массивов в функцию (многомерные массивы) - C++
Напишите программу на С++: 5.3 Передача массивов в функцию (многомерные массивы) Написать программу, выполняющую действия в...

Многомерные массивы. Написать функцию построения по действительными числами квадратной матрицы - C++
1) Написать функцию построения по действительными числами a1, a2, ..., an (n <= 50) такой квадратной матрици . Спасибо С ++

В разработанную пользовательскую функцию параметр-массив передать двумя способами: - C++
Как переделать код, чтоб соответствовало заданию: В разработанную пользовательскую функцию параметр-массив передать двумя способами: ...

Какими из приведенных способов можно задавать функцию main - C++
1. void main(int argc, char* argv) 2. void main () 3. char* main ( int input ) 4. int main ( char argc, int* argv ) 5. int...

В функцию с переменным, числом параметров передать массивы целых чисел - C++
#include <iostream> void main() { void func(int k, ...); int x = { 15, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, ...

Можно ли передать в функцию указатель на перегруженный оператор? - C++
Снова здравствуйте) Можно ли передать в функцию указатель на перегруженный оператор и как? Что-то типа: class f { ... ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.02.2010, 18:09     Какими способами можно передать многомерные массивы в функцию? #16
Цитата Сообщение от Genius Ignat Посмотреть сообщение
CyBOSSeR: Объясни пожалуйста это.
Если тип параметра шаблона поддерживает операцию индексной адресации, то данный код корректен.
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Всё правильно работает можешь не сомневаться.
Вот в этом я сильно сомневаюсь. Продемонстрируй вывод матрицы на консоль с помощью представленного тобой способа.
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
20.02.2010, 18:15     Какими способами можно передать многомерные массивы в функцию? #17
Сообщение было отмечено автором темы, экспертом или модератором как ответ
зря сомневался CyBOSSeR: всё работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream.h>
int print(int *matrix, int Height, int Width){
    for(int i=0;i<Height;i++){
        for(int j=0;j<Width;j++){
cout<<' '<<matrix[i*Width+j];
        }
cout<<'\n';
    }
 
return 0;
}
 
int main(){
    int matrix[3][3]= {
 
        {1,2,3},
        {4,5,6},
        {7,8,9}
 
    };
 
print(&matrix[0][0],3,3);
 
return 0;
 
}
Добавлено через 28 секунд
VC++ 6.0
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.02.2010, 18:23     Какими способами можно передать многомерные массивы в функцию? #18
Genius Ignat, а теперь попробуй использовать эту функцию для вывода динамической матрицы и посмотри результат.

Рассмотрим матрицу:
1 2 3
4 5 6
7 8 9


Дело в том что твой подход работает только для матриц, строки которых последовательно друг за другом располагаются в памяти, т.е.
1 2 3 4 5 6 7 8 9

Если же распределять память под матрицу в куче, то картина будет совсем другой - строки скорее всего будут разбросаны в куче.
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
20.02.2010, 18:41     Какими способами можно передать многомерные массивы в функцию? #19
У меня и так работает.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream.h>
#include <stdlib.h>
 
int print(int *matrix, int Height, int Width){
        for(int i=0;i<Height;i++){
                for(int j=0;j<Width;j++){
cout<<' '<<matrix[i*Width+j];
                }
cout<<'\n';
        }
 
return 0;
}
 
int main(){
   int *matrix = (int *)malloc(3*3*sizeof(int));
 
matrix[0*3+0] = 1;
matrix[0*3+1] = 2;
matrix[0*3+2] = 3;
 
matrix[1*3+0] = 4;
matrix[1*3+1] = 5;
matrix[1*3+2] = 6;
 
matrix[2*3+0] = 7;
matrix[2*3+1] = 8;
matrix[2*3+2] = 9;
 
 
   print(matrix,3,3);
   free(matrix);
return 0;
 
}
В учебнике который у меня есть, так же с Д Матрицами работают, и кому теперь верить.

Добавлено через 4 минуты
будут разбросаны в куче.
Про это я не знаю, я предполагаю что такое может возникнуть если память будет забита по
самые гланды.

Добавлено через 37 секунд
Ну про то что работает мне врать не резон.

Добавлено через 2 минуты
Если ты прав:
будут разбросаны в куче?
Какое решение предложишь, мне тоже надо знать.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.02.2010, 22:09     Какими способами можно передать многомерные массивы в функцию? #20
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ну как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
 
template<class T>
void ShowMatrix(T matrix, int n, int m)
{
  for(int i = 0; i < n; ++i){
    for(int j = 0; j < m; ++j)
      std::cout << matrix[i][j] << "\t";
 
    std::cout << std::endl;
  }
}
 
int main()
{
  int matrix[][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9},
  };
 
  ShowMatrix(matrix, 3, 3);
 
  return 0;
}
Цитата Сообщение от Genius Ignat Посмотреть сообщение
У меня и так работает.
Естественно, здесь и матрицы то нет, а только одномерный массив, поэтому и работает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2010, 22:23     Какими способами можно передать многомерные массивы в функцию?
Еще ссылки по теме:

Можно ли передать в функцию массив произвольного размера ? - C++
Хочу создать функцию для детекта количества элементов в массиве sizeof(array)/sizeof(array); и надо чтобы функция принимала...

Можно ли в качестве параметра функции передать другую функцию? - C++
В ниже представленной программе функция returnMax находит в массиве максимальный элемент и возвращает его. returnMin - делает тоже самое,...

А можно в функцию, или перегруженный оператор передать ссылку на копию? - C++
И какой надо написать прототип?

Можно ли передать указатель на функцию как параметр другой функции? - C++
В общем, вопрос. Можно ли, допустим ... int fun1(int x) { ... ... ... return x*1000; }

Многомерные массивы - C++
Здравствуйте, уважаемые форумчане! Давненько я не задавал здесь своих глупых вопросов по плюсам. Надо бы исправить ситуацию: В общем, я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
20.02.2010, 22:23     Какими способами можно передать многомерные массивы в функцию? #21
Если же распределять память под матрицу в куче, то картина будет совсем другой - строки скорее всего будут разбросаны в куче.
Если выделять память под массив указателей на строки а потом под строки, то такой способ доступа точно не подходит, я согласен с тобой.
Yandex
Объявления
20.02.2010, 22:23     Какими способами можно передать многомерные массивы в функцию?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru