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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.67
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
#1

Двумерный массив в качестве параметра функции - C++

01.05.2010, 21:30. Просмотров 3509. Ответов 21
Метки нет (Все метки)

почему не удаётся передать в качестве параметра двумерный массив?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>
 
int sum(const int** mas, const int l,const int m);
 
int const l = 2, m=4;
 
int main(){
 
    const int marks[l][m]={{1,2,-4,6},{0,5,-2,8}};
 
    cout<< sum(marks, l,m);
    return 0;
}
 
int sum(const int** mas, const int l,const int m) 
{int s = 0;
for (int i = 0 ; i<l; i++)
for (int j = 0 ; j<l; j++)
  s += mas[i][j];
 return s;}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2010, 21:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двумерный массив в качестве параметра функции (C++):

двумерный массив в качестве параметра метода класса - C++
Добрый день Есть проблемка, попробую упростить условия по максимуму: В программе меется некоторый класс, у этого класса есть метод,...

Динамический массив структуры в качестве параметра функции - C++
Привет! Нужна помощь ( Есть структура struct Embedded { double density; double energy; } есть 2 массива динамический ...

Как передать массив структур в функцию в качестве параметра, чтобы изменения в функции меняли исходный массив? - C++
Допустим есть структура struct Base { int a; int b; int c; }; В основном методе main() объявим массив...

Передача функции в качестве параметра - C++
Как передать функцию с параметрами в transform? Т.е., например, мне надо из каждого числа вектора вычесть число k с помощью transform'а,...

Указатель на функцию в качестве параметра функции - C++
ln(1-x)+sinx необходимо создать программу демонстрирующую возможность использования указателя на некоторую функцию в качестве параметра...

Функции, передача массива в качестве параметра - C++
Приветствую) Собственно, есть простенькое задание с двумерными массивами, оно выполнено: #include &lt;iostream.h&gt; #include &lt;conio.h&gt; ...

21
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
02.05.2010, 18:38  [ТС] #16
msvs 6.0
наверное не понимает template<size_t n, size_t m>
но да ладно.. мне нужно понять как сделать это самым стандартным образом для любого компилятора..
и всё же решение проблемы в использовании указателей на массив?
0
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
02.05.2010, 18:58 #17
Проверил на своем VC++ 6.0 все точно как у тебя.
Вариант с массивом указателей можешь автоматизировать циклом:
C++
1
2
for( int i = 0; i < H ; i++)pmatr[i] = &matrix[i][0];
print(pmatr,H,W);
0
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
02.05.2010, 21:20  [ТС] #18
а что в качестве параметра функции нужно использовать одномерный массив указателей на переменные многомерного массива? можете элементарно объяснить - как в должен выглядеть параметр - многомерный массив в описании создаваемой функции и как должен выглядеть этот параметр при вызове этой функции?... хотелось бы конкретики.
0
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
02.05.2010, 21:53 #19
можете элементарно объяснить - как в должен выглядеть параметр - многомерный массив в описании создаваемой функции
Так: Type ** matrix;
matrix - это двойной указатель..
Двойной указатель предназначен для хранения адреса простого указателя.
Массив указателей реализуется на основе двойного константного указателя..
Двойной константный указатель всегда хранит адрес 1 первого указателя [0].


Мы передаем в функцию адрес первого указателя: наведенного на первую строку матрицы.

[][] - операция
-Первый параметр операции: первая скобка задает смещение:
указатель на какую строку должен использоваться, для дальнейшего смещения операцией ->
второй скобкой.

Если не понял, извиняй, указатели: это тема не из легких.
1
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
02.05.2010, 22:15  [ТС] #20
int sum(int **mas[][],const int l,const int m); - так должны выглядеть параметры в описании создаваемой функции?
как тогда должны выглядеть параметры при вызове функции в главной функции?
0
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
02.05.2010, 22:35 #21
Передача стек матрицы, через массив указателей наведенных на матрицу
Вроде вполне нормально написал...
Замени реализацию Print на Sum и поменяй название функции на Sum.

Так же можешь поменять это:
C++
1
2
3
pmatr[0] =&matrix[0][0];
pmatr[1] =&matrix[1][0];
pmatr[2] =&matrix[2][0];
на это:
C++
1
for( int i = 0; i < H ; i++)pmatr[i] = &matrix[i][0];
Добавлено через 3 минуты

Не по теме:


А вообще следовало бы:
поменять компилятор, потому как вариант CyBoSSeR мне нравиться,
ни каких заморочек и заготовок.
Я к сожалению привык использовать VC++ 6.0 .
Хотя у меня и MSVS 2008 есть.

2
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
02.05.2010, 22:46  [ТС] #22
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream.h>
 
const int l=2;
const int m=4;
 
int sum(int *mas[],const int l,const int m);
    
int main(){
    int *pmarks[l];
    int marks[l][m]={{1,2,-4,6},{0,5,-2,8}};
    for( int i=0; i<l; i++)
        pmarks[i] = &marks[i][0];
    cout<< sum(pmarks,l,m);
    return 0;
}
 
int sum(int *mas[],const int l,const int m)
{
    int s = 0;
    for (int i=0 ; i<l; i++)
        for (int j=0 ; j<m; j++)
            s += mas[i][j];
    return s;
}
круто! только сейчас вник.. гранд мерси... то есть получается - возможно только передать массив указателей на первые элементы и и уже получается как-будто передаем одинарный массив...это кстати единственный способ?
0
02.05.2010, 22:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2010, 22:46
Привет! Вот еще темы с ответами:

Передача CString в качестве параметра функции - C++
Добрый всем вечер! Мучает один вопрос, на который не могу найти ответ. Как наилучшим образом передавать объект класса CString в...

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

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

Как передать слово в качестве параметра функции? - C++
Возможно ли чтобы функция принимала слово, вывела его , и рассчитала его длину? void write(char* word) { cout &lt;&lt; word &lt;&lt; &quot;...


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

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

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