Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Передача массивов в функцию (многомерные массивы) - 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...

Какими способами можно использовать функции класса B, как параметры функции Sub класса А? - C++
class A {... void Sub(...); ...} class B : ... { public: float f1(float); float f2(float); ...

20
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 143
Регистрация: 03.07.2009
Сообщений: 10,708
18.02.2010, 02:40 #2
C++
1
2
3
void func(int** mas, int n, int m)
{
}
0
fasked
Эксперт С++
4976 / 2556 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.02.2010, 15:40  [ТС] #3
а как эту функцию вызвать???
0
Genius Ignat
1241 / 779 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
18.02.2010, 16:38 #4
func(имя твоего массива: массив динамический, размер1[высота], размер2[ширина]); //так.
0
fasked
Эксперт С++
4976 / 2556 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.02.2010, 16:42  [ТС] #5
значит в этом вся проблема, как быть с не динамическими массивами???
0
Genius Ignat
1241 / 779 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
18.02.2010, 16:57 #6
Так:
C++
1
2
3
void func(int* mas, int n, int m)
{
}
Такую функцию можно вызвать допустим так:
C++
1
 func(&matrix[0][0],3,3);
0
Зоти Сергей
229 / 227 / 13
Регистрация: 18.12.2009
Сообщений: 316
18.02.2010, 17:23 #7
Цитата Сообщение от M128K145 Посмотреть сообщение
void func(int** mas, int n, int m)
Вообще-то это передача в функцию указателя на указатель а не двумерного массива.
При использовании как двумерного массива в реализации можете получить Access Violation.

!функция из данной программы
1
Genius Ignat
1241 / 779 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
18.02.2010, 17:29 #8
Зоти Сергей:

C++
1
2
3
4
5
6
7
8
9
int main(){
int **matrix = new int*[2];
for(int i=0;i<2;i++)matrix[i] = new int[2];
func(matrix,2,2);    //вот так передается двумерный динамический массив.
 
 
//тыдыщ дпз удаление ниже должно быть ...
return 0;
}
Добавлено через 52 секунды
указателя на указатель хранит начало двумерного массива: адрес первого указателя.

Добавлено через 29 секунд
указателя на указатель хранит начало двумерного массива: адрес первого указателя.
0
Зоти Сергей
229 / 227 / 13
Регистрация: 18.12.2009
Сообщений: 316
19.02.2010, 14:45 #9
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Добавлено через 52 секунды
указателя на указатель хранит начало двумерного массива: адрес первого указателя.
Добавлено через 29 секунд
указателя на указатель хранит начало двумерного массива: адрес первого указателя.

Да, это правильно. так вы в функцию и передаете указатель на указатель.
А попробуйте в Вашу ф-цию func(**int)
передать статический массив.
например

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        int Width=10;
        int Height=10;
        int ** Array = new int * [Width];
        for(int i=0;i<Width;i++)
        Array[i]= new int[Height];
        for(int y=0;y<Height;y++)
                for(int x=0;x<Width;x++)
                        Array[x][y]=x+y;
 
        func(Array,Height,Width);       //ошибки не выдаст.
 
        
 
        int SecondArray[10][10];
         for(int y=0;y<Height;y++)
                for(int x=0;x<Width;x++)
                        SecondArray[x][y]=x+y;
 
        
         func((int**)&Array[0][0],Height,Width); //А вот это ошибка хотя передаете массив
0
Genius Ignat
1241 / 779 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
20.02.2010, 13:36 #10
Зоти Сергей:
А ты думал я этого не знаю, я уже приводил как статический можно передать:
Так:
C++
1
2
3
void func(int* mas, int n, int m)
{
}
Такую функцию можно вызвать допустим так:
C++
1
func(&matrix[0][0],3,3);
0
spacistor
1 / 1 / 0
Регистрация: 18.02.2010
Сообщений: 4
20.02.2010, 14:16 #11
Genius Ignat,
Вызвать-то можно, а как внутри функции обратиться к элементу матрицы maytrix[i][j] ?
0
Genius Ignat
1241 / 779 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
20.02.2010, 14:24 #12
C++
1
2
3
4
5
6
int print(int *matrix, int Height, int Width){
int i=0,j=1;
matrix[i*Width+j];          //понятно.
 
return 0;
}
Добавлено через 6 минут
matrix[i][j]; //так мой компилятор не разрешает.
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.02.2010, 14:36 #13
Цитата Сообщение от Genius Ignat Посмотреть сообщение
matrix[i][j]; //так мой компилятор не разрешает.
Еще бы, было бы весьма странно если компилятор разрешал двойную индексацию одномерного массива.
0
spacistor
1 / 1 / 0
Регистрация: 18.02.2010
Сообщений: 4
20.02.2010, 16:02 #14
Genius Ignat,
гм.. а ты проверял, это работает? В смысле понятно что компилируется, но выдаются ли верные данные из таблицы (именно элементы стоящие в положении (i,j))?
0
Genius Ignat
1241 / 779 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
20.02.2010, 18:09 #15
Еще бы, было бы весьма странно если компилятор разрешал двойную индексацию одномерного массива.

C++
1
2
3
4
5
6
tepmlate<class T>
long fun(T*matr,int H,int W){
int i=0,j=1;
matr[i][j]; //а так разрешает.
return 0;
}
CyBOSSeR: Объясни пожалуйста это.

spacistor:
Всё правильно работает можешь не сомневаться.

Добавлено через 1 час 56 минут
tepmlate - ошибся не множко в названии, сорь, ну суть вопроса не меняется.

Добавлено через 3 минуты
Скорее всего это связано с шаблонами.

Добавлено через 24 секунды
А как именно не догадываюсь.
0
20.02.2010, 18:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2010, 18:09
Привет! Вот еще темы с ответами:

Многомерные массивы, как перебирать внутренние массивы - C++
Здравствуйте. Такой учебный код и плохо понимаю как перебираются внутренние массивы, может кто пояснит подоходчивее. Именно внутренний...

В функцию с переменным, числом параметров передать массивы целых чисел - C++
#include &lt;iostream&gt; 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 { ... ...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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